题目要求:给出两个整数n和p,代表n个珠子,n种颜色,要求不同的项链数,并对结果mod(p)处理。
此题本人不会做啊,只能找解题报告了,要用到欧拉函数x是n约数, 最后的答案是 (1/n * ∑Euler(n/x)(n^x)) % p x= 1
由于只关心gcd(N,i),考虑N的某个约数m在1...N的gcd中出现了几次。
gcd(N,i)==m ==> gcd(N/m,i/m)==1
显然就是欧拉函数 phi(N/m)
那么合式变为 sigma( phi(m)*N^(m) )/N
也就是 sigma( phi(m)*N^(m-1) )
分析:这题和1286,2409 都有点类似,不同之处在于,只考虑旋转,不考虑翻转;因此相对前面两个题目应该说是更简单,但一看数据范围,就不是这么回事了,1286和2409完全可以直接循环处理,但这题目n最大达100000000,显然会TLE,故需寻求更佳的解决方案。
可以用欧拉函数进行优化,或者用Mobius反演定理进行优化。下面讲解一下用欧拉优化的方法:
旋转:顺时针旋转i格的置换中,循环的个数为gcd(i,n),每个循环的长度为n