题意

题目描述

给定一个$n$个点,$n$条边的环,有$n$种颜色,给每个顶点染色,问有多少种本质不同的染色方案,答案对$10^9+7$取模

注意本题的本质不同,定义为:只需要不能通过旋转与别的染色方案相同

输入输出格式

输入格式:

第一行输入一个$t$,表示有$t$组数据

第二行开始,一共$t$行,每行一个整数$n$,意思如题所示。

输出格式:

共$t$行,每行一个数字,表示染色方案数对$10^9+7$取模后的结果

输入输出样例

输入样例#1:
复制

5
1
2
3
4
5
输出样例#1:
复制

1
3
11
70
629

说明

$$n \leq 10^9$$
$$t \leq 10^3$$

分析

先找不动点个数公式。考虑循环移动\(i\)位这个置换,把珠子循环编号。由于移动后编号要重复,所以最大的编号一定是\(\textrm{lcm}(i,m)\)。所以一个循环里面的珠子个数就是\(\frac{\textrm{lcm}(i,m)}{i}=\frac{n}{\gcd(i,n)}\)。所以共有\(\gcd(i,n)\)个循环。因此不动点个数是\(n^{\gcd(i,n)}\)

所以答案式为

\[\frac 1n\sum_{i=0}^{n-1}n^{\gcd(i,n)} \\
=\frac 1n\sum_{d|n}\varphi(\frac nd)n^d \\
=\sum_{d|n}\varphi(d) n^{\frac nd-1}
\]

我并不知道先枚约数再算欧拉函数的复杂度是多少,反正约数个数怎么也达不到\(O(\sqrt{n})\)的上界。

即使\(2^3*3*5*7*11*13*17*19*23=892371480\),这个数也只有1024个约数,小于\(\sqrt{892371480}=29872.587433\)。

int phi(int n){
int re=n;
for(int i=2;i*i<=n;++i)if(n%i==0){
re=re/i*(i-1);
while(n%i==0) n/=i;
}
if(n>1) re=re/n*(n-1);
return re;
}
void Polya(){
int n=read<int>(),ans=0;
for(int i=1;i*i<=n;++i)if(n%i==0){
ans=add(ans,mul(phi(i),fpow(n,n/i-1)));
if(i*i!=n) ans=add(ans,mul(phi(n/i),fpow(n,i-1)));
}
printf("%d\n",ans);
}
int main(){
// freopen("LG4980.in","r",stdin),freopen("LG4980.out","w",stdout);
for(int t=read<int>();t--;) Polya();
return 0;
}

宝石纪念币

跟上面那道题一样。不过多了些要求:共17中颜色,每种都要用上。保留120位数。

那么简单容斥,并实现高精度即可。

https://cyaron.blog.luogu.org/solution-p2162

我果然写不来高精度……算是做个高精练习吧。

不想容斥的话也可以用矩阵乘法:https://www.cnblogs.com/ccz181078/p/7122566.html?utm_source=itdadao&utm_medium=referral

CO int mod=1e9;int n; // qn+r
inter node(int x){
inter a(15);
a[0]=x%n,a[1]=x/n;
return a;
}
inter operator+(CO inter&a,CO inter&b){
inter ans(15);
ans[0]=a[0]+b[0];
if(ans[0]>=n) ++ans[1],ans[0]-=n;
for(int i=1;i<=14;++i){
ans[i]+=a[i]+b[i];
if(ans[i]>=mod){
if(i+1<=14) ++ans[i+1];
ans[i]-=mod;
}
}
return ans;
}
inter operator-(CO inter&a,CO inter&b){ // a>=b
inter ans(15);
ans[0]=a[0]-b[0];
if(ans[0]<0) --ans[1],ans[0]+=n;
for(int i=1;i<=14;++i){
ans[i]+=a[i]-b[i];
if(ans[i]<0){
if(i+1<=14) --ans[i+1];
ans[i]+=mod;
}
}
return ans;
}
inter operator*(CO inter&a,CO inter&b){
vector<int128> ans(15);
ans[0]=(int128)a[0]*b[0];
ans[1]+=ans[0]/n,ans[0]%=n;
for(int i=1;i<=14;++i){
ans[i]+=(int128)a[i]*b[0]+(int128)a[0]*b[i];
for(int j=1;j<=i;++j) ans[i]+=(int128)a[j]*b[i+1-j]*n;
if(i+1<=14) ans[i+1]+=ans[i]/mod;
ans[i]%=mod;
}
return inter(ans.begin(),ans.end());
}
inter pow(inter a,int b){
inter ans(15);ans[0]=1;
for(;b;b>>=1,a=a*a)
if(b&1) ans=ans*a;
return ans;
} int phi(int n){
int ans=n;
for(int i=2;i*i<=n;++i)if(n%i==0){
ans=ans/i*(i-1);
while(n%i==0) n/=i;
}
if(n>1) ans=ans/n*(n-1);
return ans;
} int C[20][20]; int main(){
read(n);
if(n<17){
for(int i=1;i<=120;++i) putchar('0');
puts("");
return 0;
}
for(int i=0;i<=17;++i){
C[i][0]=C[i][i]=1;
for(int j=1;j<i;++j) C[i][j]=C[i-1][j-1]+C[i-1][j];
}
inter ans(15);
for(int d=1;d*d<=n;++d)if(n%d==0){
inter sum(15);
for(int i=1;i<=17;i+=2) sum=sum+node(C[17][i])*pow(node(i),d);
for(int i=2;i<=17;i+=2) sum=sum-node(C[17][i])*pow(node(i),d);
sum=sum*node(phi(n/d));
ans=ans+sum;
if(n/d==d) continue;
sum=node(0);
for(int i=1;i<=17;i+=2) sum=sum+node(C[17][i])*pow(node(i),n/d);
for(int i=2;i<=17;i+=2) sum=sum-node(C[17][i])*pow(node(i),n/d);
sum=sum*node(phi(d));
ans=ans+sum;
}
printf("%03d",ans[14]%1000); // edit 1
for(int i=13;i>=1;--i) printf("%09d",ans[i]);
puts("");
return 0;
}

LG4980 【模板】Polya定理的更多相关文章

  1. P4980 【模板】Polya定理

    思路 polya定理的模板题,但是还要加一些优化 题目的答案就是 \[ \frac{\sum_{i=1}^n n^{gcd(i,n)}}{n} \] 考虑上方的式子怎么求 因为\(gcd(i,n)\) ...

  2. [洛谷P4980]【模板】Polya定理

    题目大意:给一个$n$个点的环染色,有$n$中颜色,问有多少种涂色方案是的旋转后本质不同 题解:$burnside$引理:$ans=\dfrac1{|G|}\sum\limits_{g\in G}A_ ...

  3. [wikioi2926][AHOI2002]黑白瓷砖(Polya定理)

    小可可在课余的时候受美术老师的委派从事一项漆绘瓷砖的任务.首先把n(n+1)/2块正六边形瓷砖拼成三角形的形状,右图给出了n=3时拼成的“瓷砖三角形”.然后把每一块瓷砖漆成纯白色或者纯黑色,而且每块瓷 ...

  4. HDU 3923 Invoker 【裸Polya 定理】

    参考了http://blog.csdn.net/ACM_cxlove?viewmode=contents           by---cxlove 的模板 对于每一种染色,都有一个等价群,例如旋转, ...

  5. Necklace of Beads (polya定理的引用)

    Beads of red, blue or green colors are connected together into a circular necklace of n beads ( n &l ...

  6. poj1286 Necklace of Beads—— Polya定理

    题目:http://poj.org/problem?id=1286 真·Polya定理模板题: 写完以后感觉理解更深刻了呢. 代码如下: #include<iostream> #inclu ...

  7. poj2154 Color ——Polya定理

    题目:http://poj.org/problem?id=2154 今天学了个高端的东西,Polya定理... 此题就是模板,然而还是写了好久好久... 具体看这个博客吧:https://blog.c ...

  8. Necklace of Beads(polya定理)

    http://poj.org/problem?id=1286 题意:求用3种颜色给n个珠子涂色的方案数.polya定理模板题. #include <stdio.h> #include &l ...

  9. poj 1286 polya定理

    Necklace of Beads Description Beads of red, blue or green colors are connected together into a circu ...

  10. 等价类计数:Burnside引理 & Polya定理

    提示: 本文并非严谨的数学分析,有很多地方是自己瞎口胡的,仅供参考.有错误请不吝指出 :p 1. 群 1.1 群的概念 群 \((S,\circ)\) 是一个元素集合 \(S\) 和一种二元运算 $ ...

随机推荐

  1. web service基础知识

    Web服务基础 用户访问网站的基本流程 我们每天都会用web客户端上网,浏览器就是一个web客户端,例如谷歌浏览器,以及火狐浏览器等. 当我们输入www.oldboyedu.com/时候,很快就能看到 ...

  2. python字符串转换成数字

    Action(){ int i; char *s="{str}"; i=atoi(lr_eval_string(s)); lr_output_message("%d&qu ...

  3. TortoiseGit 的下载与安装

    一.下载 访问https://tortoisegit.org/ 二.安装 然后就next,install 配置参考:2. TortoiseGit安装与配置

  4. spring源码研究2 自定义标签实现及使用

    1.自定义标签实现及使用参考: http://blog.csdn.net/fighterandknight/article/details/50112701 1)创建一个需要扩展的组件 User.ja ...

  5. <Java><类与对象><OOP>

    Overview 类 封装(encapsulation): 也称为数据隐藏.从形式上看,是将数据与行为组合起来,并对对象的使用者隐藏了数据的实现方式.封装给对象赋予了黑盒特征,提高重用性和可靠性. 继 ...

  6. dos命令:window10程序控制命令

    一.A appwiz.cpl::程序和功能 二.C calc:启动计算器 certmgr.msc:证书管理实用程 charmap:启动字符映射表 chkdsk.exe:Chkdsk:磁盘检查(管理员身 ...

  7. 移动端设置, mobile , 一张图片作为背景 ,平铺 ,自动拉伸 , 图片 铺满视界 ,窗口. background-image , background-size, background-repeat

    1.  效果: 浏览器: 手机模拟: 2.代码: <!DOCTYPE html> <html lang="en"> <head> <met ...

  8. springsecurity的退出登陆

    登陆成功就有退出,退出的实质就是让session失效 要实现退出登录只需要在spring-security配置文件中在加一行代码就可以了 <!--退出登陆--> <security: ...

  9. REST easy with kbmMW #17 – Database 6 – Existing databases

    kbmMW已经包含了非常精细的功能来确定和解释数据库中表的元数据. 在下一版本中,这个功能将得到进一步加强,可以导入现有数据库中的表,自动创建与表相匹配的ORM实体类. 这意味着你能够使用kbmMW的 ...

  10. HDU 1166 敌兵布阵(线段树点更新区间求和裸题)

    Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任 ...