【POJ2154】Color Pólya定理+欧拉函数
【POJ2154】Color
题意:求用$n$种颜色染$n$个珠子的项链的方案数。在旋转后相同的方案算作一种。答案对$P$取模。
询问次数$\le 3500$,$n\le 10^9,P\le 30000$
题解:旋转i次的循环个数显然是$gcd(i,n)$,然后套用Pólya定理。
$$ans=\frac 1 n \sum\limits_{i=1}nn{gcd(i,n)}$$
$$ans=\sum\limits_{i=1}nn{gcd(i,n)-1}$$
$$ans=\sum\limits_{i=1}n\sum\limits_{d|n}n{d-1}[gcd(i,n)=d]$$
$$ans=\sum\limits_{d|n}n{d-1}\sum\limits_{i=1}{n\over d}[gcd(i,{n\over d})=1]$$
$$ans=\sum\limits_{d|n}n^{d-1}\varphi({n\over d})$$
枚举约数即可。
#include <cstring>
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=100010;
typedef long long ll;
int n,P,T,m,ans;
int cnt[100],pri[100];
inline int phi(int x)
{
int i,ret=1;
for(i=2;i*i<=x;i++) if(x%i==0)
{
ret=ret*(i-1),x/=i;
while(x%i==0) ret=ret*i,x/=i;
}
if(x>1) ret=ret*(x-1);
return ret;
}
inline int pw(int x,int y)
{
x%=P;
int z=1;
while(y)
{
if(y&1) z=z*x%P;
x=x*x%P,y>>=1;
}
return z;
}
void dfs(int x,int d)
{
if(x==m+1)
{
ans=(ans+phi(n/d)%P*pw(n,d-1))%P;
return ;
}
for(int i=0;i<=cnt[x];i++,d*=pri[x]) dfs(x+1,d);
}
void work()
{
scanf("%d%d",&n,&P),ans=m=0;
int i,t=n;
for(i=2;i*i<=t;i++) if(t%i==0)
{
cnt[++m]=0,pri[m]=i;
while(t%i==0) t/=i,cnt[m]++;
}
if(t>1) pri[++m]=t,cnt[m]=1;
dfs(1,1);
printf("%d\n",ans);
}
int main()
{
scanf("%d",&T);
while(T--) work();
return 0;
}//1 2 30000
【POJ2154】Color Pólya定理+欧拉函数的更多相关文章
- 【poj2154】Color Polya定理+欧拉函数
题目描述 $T$ 组询问,用 $n$ 种颜色去染 $n$ 个点的环,旋转后相同视为同构.求不同构的环的个数模 $p$ 的结果. $T\le 3500,n\le 10^9,p\le 30000$ . 题 ...
- POJ2154 Color【 polya定理+欧拉函数优化】(三个例题)
由于这是第一天去实现polya题,所以由易到难,先来个铺垫题(假设读者是看过课件的,不然可能会对有些“显然”的地方会看不懂): 一:POJ1286 Necklace of Beads :有三种颜色,问 ...
- poj2154Color polya定理+欧拉函数优化
没想到贱贱的数据居然是错的..搞得我调了一中午+晚上一小时(哦不d飞LJH掉RP毕竟他是BUFF)结果重判就对了五次.. 回归正题,这题傻子都看得出是polya定理(如果你不是傻子就看这里),还没有翻 ...
- POJ2154 Color 【Polya定理 + 欧拉函数】
题目 Beads of N colors are connected together into a circular necklace of N beads (N<=1000000000). ...
- poj2154(polya定理+欧拉函数)
题目链接:http://poj.org/problem?id=2154 题意:n 种颜色的珠子构成一个长为 n 的环,每种颜色珠子个数无限,也不一定要用上所有颜色,旋转可以得到状态只算一种,问有多少种 ...
- poj 2154 Color【polya定理+欧拉函数】
根据polya定理,答案应该是 \[ \frac{1}{n}\sum_{i=1}^{n}n^{gcd(i,n)} \] 但是这个显然不能直接求,因为n是1e9级别的,所以推一波式子: \[ \frac ...
- Luogu4980 【模板】Polya定理(Polya定理+欧拉函数)
对于置换0→i,1→i+1……,其中包含0的循环的元素个数显然是n/gcd(i,n),由对称性,循环节个数即为gcd(i,n). 那么要求的即为Σngcd(i,n)/n(i=0~n-1,也即1~n). ...
- poj 2154 Color(polya计数 + 欧拉函数优化)
http://poj.org/problem?id=2154 大致题意:由n个珠子,n种颜色,组成一个项链.要求不同的项链数目.旋转后一样的属于同一种.结果模p. n个珠子应该有n种旋转置换.每种置换 ...
- poj2409 & 2154 polya计数+欧拉函数优化
这两个题都是项链珠子的染色问题 也是polya定理的最基本和最经典的应用之一 题目大意: 用m种颜色染n个珠子构成的项链,问最终形成的等价类有多少种 项链是一个环.通过旋转或者镜像对称都可以得到置换 ...
随机推荐
- 用Lua实现string的trim()方法
function trim1(s) return (s:gsub("^%s*(.-)%s*$", "%1")) end -- from PiL2 20.4 fu ...
- mac版本cornerstone的无限期破解方法(转)
CornerStone是个人非常喜欢的mac上的一款SVN客户端工具,官方提供了14天的免费试用(trail)版本.我们可以在此基础上提供无限期试用版本. 方法一:如果你从来没有安装过这个trail版 ...
- YUV格式学习笔记
YUV与RGB表现图像的方法不同,其采用的是一个亮度信号加两个色差信号的方式来表现图像.其中UV表示的是CbCr,常见的YUV格式有:YUV4:2:0,YUV4:2:2,YUV4:1:1,YUV4:4 ...
- Splash args 属性
args属性可以获取加载时配置的参数,一般我们只传入URL,如下,args.url 就相当于加载时配置的URL参数,我们把它赋值给 url 变量然后返回:
- NSIS安装vcredist_64.exe
; ExecWait ‘vcredist_x86.exe’ # 一般的安装ExecWait ‘”vcredist_x86.exe” /q’ # silent install 静默安装; ExecWai ...
- hadoop核心逻辑shuffle代码分析-map端
首先要推荐一下:http://www.alidata.org/archives/1470 阿里的大牛在上面的文章中比较详细的介绍了shuffle过程中mapper和reduce的每个过程,强烈推荐先读 ...
- React Native(四)——顶部以及底部导航栏实现方式
效果图: 一步一步慢慢来: 其实刚入手做app的时候,就应该做出简单的顶部以及底部导航栏.无奈又在忙其他事情,导致这些现在才整理出来. 1.顶部导航栏:react-native-scrollable- ...
- windows“启动”对应的路径
C:\Users\huangye\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
- window下遍历并修改文件
今天需要写一个遍历文件夹下的所有文件,试了试以前的方法竟然报错了.重新改了一下. #include <iostream> #include <stdlib.h> #includ ...
- IOS设计模式第八篇之键值观察模式
版权声明:原创作品,谢绝转载!否则将追究法律责任. 键值观察模式: 在KVO,一个对象可以要求被通知当他的某个特殊的属性被改变了.自己或者另一个对象.如果你感兴趣你可以阅读更多的信息参考: Apple ...