题目: Sum
M=109+7
易得 ans=2N−1modM
N 非常大,因此要想办法化简。
注意到 M 是素数,因此可用费马小定理。
ap−1modp=1在本题中,即
2M−1modM=1若 N−1=(M−1)⋅t+k, 则
==2N−1modM((2M−1)t×2k)modM2kmodM此时 k=(N−1)mod(M−1), 但要注意保证 k 为非负数。
剩下的就是使用快速幂取模计算答案了。
既然要计算 2N−1modM, 有没有办法直接计算呢?
本质上是单精度的高精度次幂的取模运算,那么就能分解。
123=((0×10+1)×10+2)×10+3
2123=((110×21)10×22)10×23
边读边乘,读完 N 就得到了 2NmodM.
除法取模又用到了费马小定理:
==camodp(camodp)⋅(cp−1modp)a⋅cp−2modp适用条件: c,p 互质。
在本题中,有
==2N−1modM(2N×2M−2)modM((2NmodM)×C)modMC=(2M−2modM)C 是常量,先写个快速幂就能求出来。
最后相乘取模,得解。
解法1:sum.1.cpp
解法2:sum.2.cpp