没想到贱贱的数据居然是错的。。搞得我调了一中午+晚上一小时(哦不d飞LJH掉RP毕竟他是BUFF)结果重判就对了五次。。

回归正题,这题傻子都看得出是polya定理(如果你不是傻子就看这里),还没有翻转,就一个旋转,结果我就欢快的打完交上去了。傻子都知道会TLE,n<=1e9啊,O(n)都原地爆炸,那怎么办。。。一脸懵逼(然后就膜题解了)

可以发现,这题公式就是sigma(gcd(k,n))(k=1~n),然后该怎么优化呢,我(??)发现gcd(k,n)里面肯定有一些k和n的gcd是相同的,那我们设n=i*gcd,k=j*gcd,那i肯定和j互质并且1<=j<=i,而且可以发现,gcd(i*gcd,j*gcd)=gcd,只要知道j有多少个,就让power(n,n/i)乘上这个个数,那gcd=n/i的所有情况就都解决了,那具体j有多少个呢?显而易见(??)就是欧拉函数值(然而我不会)了,那我们O(sqrt(n))枚举i,然后就可以得出gcd,然后就可以求出欧拉函数值,那就是phi(i)*power(n,n/i)

#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
bool v[1100000];
int pr,prime[1100000];
void linear_prime()
{memset(v,true,sizeof(v));for(int i=2;i<=1000000;i++){if(v[i]==true)prime[++pr]=i;for(int j=1;j<=pr&&i*prime[j]<=1000000;j++){v[i*prime[j]]=false;if(i%prime[j]==0)break;}}
}
int n,mod;
int power(int A,int k)
{int ans=1;A%=mod;while(k!=0){if(k%2==1)ans=(ans*A)%mod;A=(A*A)%mod;k/=2;}return ans;
}
int phi(int x)//求欧拉函数值,即j的种数
{int ans=x;for(int i=1;prime[i]*prime[i]<=x;i++){if(x%prime[i]==0){ans=ans-ans/prime[i];while(x%prime[i]==0)x/=prime[i];}}if(x!=1)ans=ans-ans/x;return ans%mod;
}
int main()
{linear_prime();int T;scanf("%d",&T);while(T--){scanf("%d%d",&n,&mod);int ans=0;//设n=i*gcd 而 k=j*gcd,用欧拉函数将所有j的值求出 for(int i=1;i*i<=n;i++){if(n%i==0){ans=(ans+phi(i)*power(n,n/i-1))%mod;//循环节为gcdif(i*i!=n)ans=(ans+phi(n/i)*power(n,i-1))%mod;//这里两个power为什么要-1?由于要%mod,所以求值的时提早将/G(G=n)给做了
            }}printf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/AKCqhzdy/p/7598571.html

poj2154Color polya定理+欧拉函数优化相关推荐

  1. poj2154(Polya+欧拉函数优化模版)

    #include <cstdio> #include <cstring> #include<iostream> using namespace std; const ...

  2. poj2154-color-polyan次二面体+欧拉函数优化

    N<=1e9,O(nlogn)的做法会超时.从枚举置换转变为枚举轮换长度,然后可以利用欧拉函数,把复杂度变为O(√n * logn) 1 /*-------------------------- ...

  3. 【数学知识】三种方法求 [1,n] 中所有数欧拉函数(线性筛欧拉函数优化至 O(n) )

    整理的算法模板合集: ACM模板 ①直接求小于或等于n,且与n互质的数个数(求[1,n]中所有数的欧拉函数时间复杂度:O(nn)O(n\sqrt{n})O(nn​)) ②求[1,n]之间每个数的质因数 ...

  4. POJ2154(Pólya定理与欧拉函数优化)

    题目:Color 题意:将正n边形的n个顶点用n种颜色染色,问有多少种方案(答案mod p,且可由旋转互相得到的算一种) 先说说Pólya定理 设Q是n个对象的一个置换群,用m种颜色涂染这n个对象,一 ...

  5. BZOJ-1951-古代猪文-SDOI2010-费马小定理+欧拉函数+lucas定理+中国剩余定理

    描述 =>G∑(ni),i|nmodP =>G^{\sum {{n\choose i}\text{,i|n}}} modP 分析 k=∑Cin,i|n(modP) k=\sum {C_n^ ...

  6. nyoj-Color the necklace(Ploya定理 + 欧拉函数 + 扩展欧几里得(求逆元))

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=688 此题题解 不太懂,因为对这些概念,定理太模糊,理解起来比较困难,不过想想还是应该把代 ...

  7. 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法

    打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...

  8. 初等数论--同余--欧拉函数、欧拉定理、费马小定理

    初等数论--同余--欧拉函数.欧拉定理.费马小定理 概念 同余类,既约同余类 欧拉函数 完全剩余系,既约剩余系 关于完全剩余系.既约剩余系一些比较简单的定理 欧拉定理.费马小定理 博主是初学初等数论( ...

  9. 素数的有关性质(二)欧拉函数的一些定理证明与计算

    文章目录 写在前面 内容回顾 模mmm剩余类环 定理 模ppp剩余类域 定义 欧拉函数的定义 欧拉函数的性质 命题1:欧拉函数等于与mmm互素整数个数 命题2:取值为素数ppp的欧拉函数等于p−1p- ...

最新文章

  1. python3爬虫实例-自己动手,丰衣足食!Python3网络爬虫实战案例
  2. OpenCV中利用cvConvertScale()将图像的数据类型由u8转化为64f...
  3. json格式的字符串序列化和反序列化的一些高级用法
  4. android:layout_width=0.0dip,【教程】状态栏显示网速
  5. 我与TCP连接不得不说的故事
  6. hive如何处理not in和in的问题
  7. CSS之Box-sizing
  8. 广州云栖大会:阿里云携手虎牙,首次落地直播行业边缘节点及云企业网服务
  9. smarty模板引擎
  10. 根据不同条件查询_刑事立案要符合哪些条件,怎么查看立案没有
  11. 开工了,为自己做的软件。先做些控件。
  12. ansys本地的help文件_PostgreSQL本地/远程登陆配置
  13. php相册上传和删除吗,php上传与删除图片的简单范例
  14. .通过JAVA-Webservices向其它平台提供Hbase服务
  15. ftp客户端flashfxp破解教程
  16. 老男孩Linux架构师实战课程14期教程
  17. win10无法安装迅雷精简版解决办法
  18. 平方根python_python如何求平方根
  19. GUI输出中文为乱码解决方式
  20. vs2015 openssl-1.0.2j编译

热门文章

  1. 『Numpy』内存分析_高级切片和内存数据解析
  2. BZOJ 3910 并查集+线段树合并
  3. DP专辑之最长公共子序列及其变形
  4. 玩通信设备的,来这里学习
  5. 关于Ubuntu 安装tftp服务器的问题解决
  6. 关于SDIO接口的wifi和通用SD卡的一些记录
  7. 11-1 操作系统概念
  8. linux shell if运行,bash – shell脚本执行检查是否已经在运行
  9. .net core 发起web请求_温故知新 .Net重定向深度分析
  10. 问题 D: AC自动机(二分,第一个等于和最后一个等于)