这题的时间卡的。。。。

必须用欧拉来优化,而且要加素数表。最重要是,因为最后结果要/n,而数据很大,所以,必须在之前就先/n了,否则会爆数据。

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cstdio>
  4. #include <cmath>
  5. #include <cstring>
  6. #define LL __int64
  7. using namespace std;
  8.  
  9. int fact[1000],fp;
  10. bool isprime[35000];
  11. int prime[35000],np;
  12.  
  13. void getprime(){
  14. np=0;
  15. memset(isprime,true,sizeof(isprime));
  16. for(int i=2;i<35000;i++){
  17. if(isprime[i]){
  18. prime[np++]=i;
  19. for(int j=i*i;j<35000;j+=i)
  20. isprime[j]=false;
  21. }
  22. }
  23. }
  24.  
  25. int Power(int a,int b,int m){
  26. int ans=1;
  27. a=a%m;
  28. while(b){
  29. if(b&1) ans=(ans*a)%m;
  30. a=(a*a)%m;
  31. b=b>>1;
  32. }
  33. return ans;
  34. }
  35.  
  36. int Euler(int s){
  37. int res=s;
  38. for(int i=0;i<np&&prime[i]*prime[i]<=s;i++){
  39. if(s%prime[i]==0){
  40. res=res-res/prime[i];
  41. while(s%prime[i]==0)
  42. s=s/prime[i];
  43. }
  44. }
  45. if(s>1)
  46. res=res-res/s;
  47. return res;
  48. }
  49.  
  50. void Burnside(int n,int p){
  51. fp=0;
  52. for(int i=1;i*i<=n;i++){
  53. if(n%i==0){
  54. fact[fp++]=i;
  55. if(n/i!=i)
  56. fact[fp++]=n/i;
  57. }
  58. }
  59. int ans=0;
  60. for(int i=0;i<fp;i++){
  61. ans=(ans+Power(n,fact[i]-1,p)*((Euler(n/fact[i]))%p))%p; //此处是fact[i]-1表明 除以n,这是因为为了MOD P
  62. }
  63. ans%=p;
  64. printf("%d\n",ans);
  65. }
  66.  
  67. int main(){
  68. getprime();
  69. int T,n,p;
  70. scanf("%d",&T);
  71. while(T--){
  72. scanf("%d%d",&n,&p);
  73. Burnside(n,p);
  74. }
  75. return 0;
  76. }

  

POJ 2154的更多相关文章

  1. 【POJ 2154】Color

    http://poj.org/problem?id=2154 还是先套上Burnside引理:\[\begin{aligned} ans & =\sum_{i=1}^n n^{(i,n)-1} ...

  2. poj 2154 Color——带优化的置换

    题目:http://poj.org/problem?id=2154 置换的第二道题! 需要优化!式子是ans=∑n^gcd(i,n)/n (i∈1~n),可以枚举gcd=g,则有phi( n/g )个 ...

  3. poj 2154 Color < 组合数学+数论>

    链接:http://poj.org/problem?id=2154 题意:给出两个整数 N 和 P,表示 N 个珠子,N种颜色,要求不同的项链数, 结果 %p ~ 思路: 利用polya定理解~定理内 ...

  4. poj 2154 Color(polya计数 + 欧拉函数优化)

    http://poj.org/problem?id=2154 大致题意:由n个珠子,n种颜色,组成一个项链.要求不同的项链数目.旋转后一样的属于同一种.结果模p. n个珠子应该有n种旋转置换.每种置换 ...

  5. 组合数学 - 波利亚定理 --- poj : 2154 Color

    Color Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7873   Accepted: 2565 Description ...

  6. [ACM] POJ 2154 Color (Polya计数优化,欧拉函数)

    Color Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7630   Accepted: 2507 Description ...

  7. POJ 2154 【POLYA】【欧拉】

    前记: TM终于决定以后干啥了.这几天睡的有点多.困饿交加之间喝了好多水.可能是灌脑了. 切记两件事: 1.安心当单身狗 2.顺心码代码 题意: 给你N种颜色的珠子,串一串长度问N的项链,要求旋转之后 ...

  8. poj 2154 Color

    这是道标准的数论优化的polya题.卡时卡的很紧,需要用int才能过.程序中一定要注意控制不爆int!!!我因为爆intWA了好久=_=…… 题目简洁明了,就是求 sigma n^gcd(i,n):但 ...

  9. POJ 2154 Color [Polya 数论]

    和上题一样,只考虑旋转等价,只不过颜色和珠子$1e9$ 一样的式子 $\sum\limits_{i=1}^n m^{gcd(i,n)}$ 然后按$gcd$分类,枚举$n$的约数 如果这个也化不出来我莫 ...

  10. POJ 2154 color (polya + 欧拉优化)

    Beads of N colors are connected together into a circular necklace of N beads (N<=1000000000). You ...

随机推荐

  1. BA--冷源系统原理图解

  2. [SharePoint][SharePoint Designer 入门经典]Chapter11 工作流基础

    1.SPS中可以创建的工作流的种类 2.SPD工作流基础 3.创建列表\库工作流 4.创建可重用的工作流 5.利用基于站点的工作流 6.SPD 工作流的限制和注意事项

  3. IOC与DI区别

    (1)IOC:控制反转,把对象创建交给spring进行配置. (2)DI:依赖注入,向类里面的属性中设置值. (3)关系:依赖注入不能单独存在,需要在IOC的基础之上完成操作.

  4. lightshot截图工具的安装及使用

    通常我们做PPT或者写博客难免要用到截图工具,而Windows自带的snippingtool启动有延迟也不够方便,QQ有截屏又需要联网及登录情况下,于是我想着在Chrome上搜一款清新简洁的截屏软件, ...

  5. 百度ai和图灵123实现简单的语音对话

    百度ai和图灵123实现简单的语音对话

  6. 在ubuntu下安装redis

    最简单在线安装的方式: #安装Redis服务器端 ~ sudo apt-get install redis-server 安装完成后,Redis服务器会自动启动,我们检查Redis服务器程序 # 检查 ...

  7. Spring《六》管理Bean

    BeanWrapper BeanFactory ApplicationContext 1.通常情况下使用BeanFactory.ApplicationContext 2.ApplicationCont ...

  8. 移动端 | table 布局

    <table border=” cellspacing="> <caption>表格标题</caption> <tr> <td alig ...

  9. vue路由钩子拦截器beforeEach和afterEach及页面路由变化路由监听

    在路由跳转的时候,我们需要一些权限判断或者其他操作.这个时候就需要使用路由的钩子函数. 定义:路由钩子主要是给使用者在路由发生变化时进行一些特殊的处理而定义的函数. 总体来讲vue里面提供了三大类钩子 ...

  10. 列表查询组件代码, 简化拼接条件SQL语句的麻烦

    列表查询组件代码, 简化拼接条件SQL语句的麻烦 多条件查询