链接:http://poj.org/problem?id=2154

题意:给出两个整数 N 和 P,表示 N 个珠子,N种颜色,要求不同的项链数, 结果 %p ~

思路: 利用polya定理解~定理内容:

是n个对象的一个置换群, 用m种颜色染图这n个对象,则不同的染色方案数为:

其中

的循环节数~
 
 

本题只有旋转一种置换方式,那么共有 N 个置换, 每个置换的循环节为 gcd(N,i)~

那么结果为∑(N^(gcd(N, i))) %P。  N为 1e9, 不能枚举 i , 但我们可以统计 gcd(N,i)==a 的有多少个~

令L==N/a, i==a*t,  即 a==gcd(N, i)==gcd(L*a, t*a), 此时只要满足 gcd(L, t)==1即可. 而1<=i<=N 即 1<=t<=N/a==L~

所以t的个数为 L 的欧拉函数,  所以 结果为:∑(Euler(L)*(n^(N/L)))%p ,为了避免最后做除法结果可化为∑(Euler(L)*(n^(N/L-1)))%p。

 #include <iostream>
#include <cstdio>
using namespace std;
const int MN = 5e4;
typedef long long LL;
int a[MN],p[MN], T, N, M, k;
LL P_M( int a, int b )
{
LL res=, t=(LL)a%M;
while(b){
if(b&)res=(res*t)%M;
t=(t*t)%M;
b>>=;
}
return res;
}
void getp( )
{
for( int i=; i*i<=MN; i+= ){
if(!a[i])
for( int j=i+i; j<=MN; j+=i )
a[j]=;
}
p[]=, k=;
for( int i=; i<MN ; i+= )
if(!a[i]) p[k++]=i;
}
int Euler( int x)
{
int res=x;
for( int i=; i<k&&p[i]*p[i]<=x; ++ i ){
if(x%p[i]==){
res=res/p[i]*(p[i]-);
while(x%p[i]==){ x=x/p[i];
}
}
}
if(x>)
res=res/x*(x-);
return res;
}
int main( )
{
getp();
scanf("%d", &T);
while(T--){
scanf("%d%d", &N, &M);
int i;
LL ans=;
for( i=; i*i<N; ++ i ){ if(N%i==){
ans+=(LL)Euler(i)%M*P_M(N, N/i-);
ans%=M;
ans+=(LL)Euler(N/i)%M*P_M(N, i-);
ans%=M;
} }
if(i*i==N){
ans+=(LL)Euler(i)%M*P_M(N, i-);
ans%=M;
}
printf("%lld\n", ans);
}
return ;
}
 

最新文章

  1. java基础 swing编程实战
  2. 给ubuntu中的软件设置desktop快捷方式(以android studio为例)
  3. asp.net ajax控件tab扩展,极品啊,秒杀其它插件
  4. vsftp不同帐号的目录和权限
  5. cocos2dx中如何从一张图片中切割一部分显示成小图片
  6. Android 内存分析工具 MAT(Memory Analyzer Tool)
  7. 第二章实例:Android窗口菜单显示
  8. Zeppelin使用Spark的yarn-client模式
  9. Scrapy中使用Django的Model访问数据库
  10. 华为OJ之最长公共子序列
  11. 使用yeoman构建angular应用
  12. centos6.5时间相关
  13. 指令汇B新闻客户端开发(三) 下拉刷新
  14. 【原创】大叔经验分享(32)docker挂载文件修改生效
  15. 自定义Dialog的详细步骤(实现自定义样式一般原理)
  16. 【python接口自动化-requests库】【三】优化重构requests方法
  17. 解决git: &#39;subtree&#39; is not a git command. See &#39;git --help&#39;.
  18. jmater分布式压力测试总结
  19. iOS正则表达式的使用案例-富文本
  20. RESTful Web API 实践

热门文章

  1. javaweb学习总结(十六)——JSP指令(转)
  2. 【CF1025C】Plasticine zebra(模拟)
  3. 标准C程序设计七---55
  4. Linux 之 权限管理
  5. C#中流写入类StreamWriter的介绍
  6. 洛谷——P1086 花生采摘
  7. UVALive 5135 Mining Your Own Business 双连通分量
  8. idea没有subversion问题
  9. Ubuntu 16.04安装MongoDB的GUI工具RoboMongo
  10. Oracle SOA Suite OverView