P4980-[模板]Pólya定理

正题

题目链接:https://www.luogu.com.cn/problem/P4980


题目大意

nnn个物品图上mmm种颜色,求在可以旋转的情况下本质不同的涂色方案。


解题思路

既然是群论基本题就顺便写一下刚刚了解到的相关知识把(顺便消磨一下时间

一个群(G,×)(G,\times )(G,×)定义为一个在运算×\times×下满足以下条件的集合

  1. 封闭性:若存在a,b∈Ga,b\in Ga,bG那么有a×b∈Ga\times b\in Ga×bG
  2. 交换律:若有a,b,c∈Ga,b,c\in Ga,b,cG那么有(a×b)×c=a×(b×c)(a\times b)\times c=a\times (b\times c)(a×b)×c=a×(b×c)
  3. 单位元:群中∃e∈G\exist e\in GeG满足∀x∈G\forall x\in GxG都有x×e=xx\times e=xx×e=x
  4. 逆元:对于∀x∈G\forall x\in GxG都有一个唯一元素y∈Gy\in GyGx×y=ex\times y=ex×y=e

然后中间一些东西很多很杂这里不多说了,直接到置换部分。

一般来说规定置换第一行为(1,2,3...)(1,2,3...)(1,2,3...),那么定义一个置换σ=(g1,g2,g3,...)\sigma=(g_1,g_2,g_3,...)σ=(g1,g2,g3,...)。如果一个置换作用与一个排列aaa,一般写为σ(a)=b\sigma(a)=bσ(a)=b的话,就有bi=agib_i=a_{g_i}bi=agi。需要注意的是对于一个置换两次后相当与使用了另一个置换。(也就是置换只能生效一次

然后就是Burnside\text{Burnside}Burnside引理了,对于一个置换群GGG,若GGG作用与一个集合XXX时,集合XXX中本质不同的元素个数为
1∣G∣∑f∈GC(f)\frac{1}{|G|}\sum_{f\in G}C(f)G1fGC(f)
其中C(f)C(f)C(f)表示XXX的所有元素中对于置换fff的不动点数量。

Polya\text{Polya}Polya定理就是建立在Burnside\text{Burnside}Burnside引理上的,对于一个置换fff,定义它的循环节数量为T(f)T(f)T(f),用mmm种颜色染色时方本质不同的染色方案数就是
1∣G∣∑f∈GmT(f)\frac{1}{|G|}\sum_{f\in G}m^{T(f)}G1fGmT(f)
也就是mT(f)=C(f)m^{T(f)}=C(f)mT(f)=C(f),这个很显然,因为每个循环节涂成一种颜色就是一个不动点。

回到这题的旋转来,我们可以将其视为nnn个不同的置换构成的一个置换群。对于旋转iii步,它的循环节数量就是gcd(n,i)gcd(n,i)gcd(n,i),也就是我们要求
1n∑i=0n−1mgcd(n,i)\frac{1}{n}\sum_{i=0}^{n-1}m^{gcd(n,i)}n1i=0n1mgcd(n,i)
枚举一下gcd(n,i)gcd(n,i)gcd(n,i)
1n∑d∣nmd∑i=1nd[gcd(nd,i)==1]\frac{1}{n}\sum_{d|n}m^d\sum_{i=1}^{\frac{n}{d}}[gcd(\frac{n}{d},i)==1]n1dnmdi=1dn[gcd(dn,i)==1]
哦对啊好像有m=nm=nm=n
1n∑d∣nndφ(nd)=∑d∣nnd−1φ(nd)\frac{1}{n}\sum_{d|n}n^d\varphi(\frac{n}{d})=\sum_{d|n}n^{d-1}\varphi(\frac{n}{d})n1dnndφ(dn)=dnnd1φ(dn)
这个时间复杂度大概是O(Tn34)O(Tn^{\frac{3}{4}})O(Tn43)的,但是因为约数个数远到不了n\sqrt nn所以你可以把它视为常数比较大的O(Tn)O(T\sqrt n)O(Tn)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll P=1e9+7;
ll T,n,ans;
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
ll phi(ll x){ll ans=x;for(ll i=2;i*i<=x;i++){if(x%i)continue;while(x%i==0)x/=i;ans=ans/i*(i-1);}if(x>1)ans=ans/x*(x-1);return ans;
}
ll calc(ll x)
{return phi(x)*power(n,n/x-1)%P;}
signed main()
{scanf("%lld",&T);while(T--){scanf("%lld",&n);ans=0;for(ll i=1;i*i<=n;i++){if(n%i)continue;ans=(ans+calc(i))%P;if(i*i!=n)ans=(ans+calc(n/i))%P;}printf("%lld\n",ans);}return 0;   
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

逆元的求法

逆元&#xff1a; 对于a和p&#xff0c;若 a * inv(a) % p ≡ 1&#xff0c;则称inv(a)为a%p的逆元。其中p为质数 逆元就是在mod下&#xff0c;不能直接除以一个数&#xff0c;而要乘以他的逆元 a * inv(a) 1 (mod p) x / a可以改成 x * inv(a) % p 文章目录方法一.扩展欧几里…

[CF995F] Cowmpany Cowmpensation(树形dp,拉格朗日插值)

树形DP&#xff1a; 设f[u][i]f[u][i]f[u][i]表示给uuu的子树分配工资&#xff0c;uuu点工资为iii的方案数 f[u][i]∏v∈sonu(∑j1if[v][j])f[u][i]\prod\limits_{v\in son_u}(\sum\limits_{j1}^{i}f[v][j])f[u][i]v∈sonu​∏​(j1∑i​f[v][j]) 前缀和优化&#xff1a; 设g[u…

【dfs】益智游戏(2017 特长生 T2)

题目大意 给你四个数字&#xff0c;问你能否经过加减乘除使其结果为24 解题思路 先暴力枚举四个数字的全排列&#xff0c;然后枚举运算符和括号 代码 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long …

分布式系统消息中间件——RabbitMQ的使用基础篇

前言我是在解决分布式事务的一致性问题时了解到RabbitMQ的&#xff0c;当时主要是要基于RabbitMQ来实现我们分布式系统之间对有事务可靠性要求的系统间通信的。关于分布式事务一致性问题及其常见的解决方案&#xff0c;可以看我另一篇博客。提到RabbitMQ&#xff0c;不难想到的…

P4630-[APIO2018]Duathlon铁人两项【圆方树】

正题 题目链接:https://www.luogu.com.cn/problem/P4630 题目大意 nnn个点mmm条边的一张无向图&#xff0c;求有多少对三元组(s,c,f)(s,c,f)(s,c,f)满足s≠f≠ts\neq f\neq ts​f​t且存在一条从sss到fff的简单路径经过ccc 解题思路 一个比较显然的结论是在一个点双中的三…

小a的旅行计划

来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld文章目录题目描述题解&#xff1a;代码&#xff1a;题目描述 小a终于放假了&#xff0c;它想在假期中去一些地方…

吃豆人(luogu 7472/NOI Online 2021 普及组 T2)

正题 luogu 7472 题目大意 给出一个正方形点阵&#xff0c;让你选择两个点&#xff0c;分别向两个方向移动&#xff08;必须是45度&#xff09;&#xff0c;每到一个点就得到该点的贡献&#xff08;不重复得&#xff09;&#xff0c;遇到墙壁反射&#xff0c;问你最大贡献 解…

[XSY] 选举(线段树优化dp)

选举 //a[i]1 or 0 or -1,表示i支持小奇 or 中立 or 支持魔法猪 //sum[i]a[1]a[2]...a[i] //设dp[i]表示把1~i划分成若干区间,(小奇得票-魔法猪得票)的最大值 /*dp[i]max {dp[j]1 (sum[i]-sum[j]>0即sum[i]>sum[j])dp[j] (sum[i]-sum[j]0即sum[i]sum[j])dp[j]-1 (sum[…

P3480-[POI2009]KAM-Pebbles【阶梯博弈】

正题 题目链接:https://www.luogu.com.cn/problem/P3480 题目大意 nnn个石头堆上进行Nim\text{Nim}Nim游戏&#xff0c;不过需要满足每次操作前后都有ai≤ai1(i∈[1,n))a_i\leq a_{i1}(\ i\in[1,n)\ )ai​≤ai1​( i∈[1,n) ) 解题思路 让每一个biai−ai−1b_ia_i-a_{i-1}bi​…

在 Centos7 用Jexus服务器 运行.Net Core 只需几步

安装 .Net SDK 不需要按照 .net core runtime,sdk 依赖于运行时会自动安装第一步 添加dotnet源sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm第二步 安装 .Net Core可能由于网络原因&#xff0c;下载要耐心等待一段时间,下载完成后…

小球碰撞(理解ing)

来源&#xff1a;牛客网&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 一个弹球&#xff08;可视为质点&am…

【斜率优化】Cats Transport(luogu-CF 311B)

正题 luogu-CF 311B 题目大意 有n个点&#xff0c;p个铲屎官和m只猫 did_idi​表示i到i-1的距离 第i只猫在tit_iti​这个时间hih_ihi​这个点开始等待铲屎官来接它走 铲屎官会以一个单位时间走一个单位长度的速度从第一个点向最后一个点走&#xff08;不能停止&#xff09;&a…

[XSY4170] 妹子(线段树上二分)

传送门 题意&#xff1a; 给出两个长度为NNN的整数序列A1A2...ANA_1A_2...A_NA1​A2​...AN​,B1B2...BNB_1B_2...B_NB1​B2​...BN​。有MMM组询问(opt,l,r,d)(opt,l,r,d)(opt,l,r,d)&#xff0c;令nr−l1nr-l1nr−l1 若optAoptAoptA&#xff1a;∀i∈[1,n],aiAli−1d,biBli−…

P3643-[APIO2016]划艇【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P3643 题目大意 求有多少个nnn个数的序列xxx满足&#xff0c;xi∈{0}∪[ai,bi]x_i\in \{0\}\cup[a_i,b_i]xi​∈{0}∪[ai​,bi​]且非000数递增。 解题思路 会发现ai,bia_i,b_iai​,bi​很大不能太暴力的将第二维的dpdpdp设…

.Net思想篇:为何我们需要思想大洗礼?

前言每当说一件事的时候&#xff0c;我喜欢回溯往事&#xff0c;这样思有所依&#xff0c;文有所凭&#xff0c;才能达到打字如尿崩&#xff0c;一发不可收拾的流畅度。让我们将时光回溯到08年&#xff0c;当时和同学们就有了学java和.net之争&#xff0c;当然不止这些&#xf…

【Manacher】最长双回文串(luogu 4555)

正题 luogu 4555 题目大意 给出一个字符串&#xff0c;让你求两个相邻的回文串的最大长度和 解题思路 先用Manacher求出最长回文串 然后暴力配对即可 代码 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define l…

[AGC009B] Tournament(多叉树转二叉树后的最小可能深度)

传送门 把aia_iai​看成faifa_ifai​&#xff0c;建出一棵多叉树&#xff0c;再把多叉树转成二叉树&#xff0c;转出来的每棵二叉树对应着一种比赛方式。 以n8,a2,...,81,1,2,4,3,3,3n8,a_{2,...,8}1,1,2,4,3,3,3n8,a2,...,8​1,1,2,4,3,3,3为例&#xff0c; 多叉树转出的二…

C# 8中的Async Streams

关键要点异步编程技术提供了一种提高程序响应能力的方法。Async/Await模式在C# 5中首次亮相&#xff0c;但只能返回单个标量值。C# 8添加了异步流&#xff08;Async Streams&#xff09;&#xff0c;允许异步方法返回多个值&#xff0c;从而扩展了其可用性。异步流提供了一种用…

线段树回顾

这个博主的线段树我觉得讲的很细了 文章目录建树区间查询&#xff0c;单点修改区间修改&#xff0c;单点查询区间修改&#xff0c;区间查询&#xff08;带pushdown&#xff09;乘法线段树根号线段树建树 struct node{ll l,r;ll sum,mlz,plz; }tree[4*maxn]; inline void bulid…

P3175-[HAOI2015]按位或【min-max容斥,FWT】

正题 题目链接:https://www.luogu.com.cn/problem/P3175 题目大意 开始有一个nnn位二进制数s0s0s0&#xff0c;每次有pip_ipi​概率选取数字iii让sss或上这个数字iii&#xff0c;求期望多少次能够让sss的nnn个位都变为111。 解题思路 因为是或所以我们只关心最后一个选中的数…