poj2154质因数分解+快速幂+欧拉函数解决

题目要求:给出两个整数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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值