快速幂(模幂运算)在 O(logb) 次乘法内计算 abmodm,是同余算术中最基本的算法:素性检验、大数分解、离散对数问题等数论算法的内层循环都以模幂为原子操作。
算法
把 b 写成二进制 b=∑ibi2i(bi∈{0,1}),由
ab≡i:bi=1∏a2i(modm)
逐位平方并累积:从 a20=a 出发,每步平方得 a2i+1=(a2i)2;若 bi=1 则乘入结果。
复杂度与正确性
- 模乘次数 O(logb)(至多 2⌊log2b⌋ 次),远优于逐次相乘的 O(b)
- 正确性由同余的乘法兼容性保证:(xmodm)(ymodm)≡xy(modm),中间值始终保持小于 m2
指数约化
若 gcd(a,m)=1,可用欧拉函数先约化指数:ab≡abmodφ(m)(modm);一般情形先除以 gcd(a,m) 再约化。
示例
计算 325mod7:25=(11001)2,31=3,32≡2,34≡4,38≡2,316≡4,故
325=316⋅38⋅31≡4⋅2⋅3=24≡3(mod7)
直接验证:3 是模 7 的原根,阶为 6,325=(36)4⋅3≡3(mod7)。
应用
模幂是一切模算术算法的基石:素性检验中的 an−1modn、RSA 等公钥密码的加密解密、离散对数问题的群运算以及Shor算法的量子模幂都直接调用它。