快速幂记忆
作者:
常台盘の超炮
,
2022-03-12 00:02:15
,
所有人可见
,
阅读 258
//快速幂这里就是求a的k次方mod p的值
//快速记忆:也就一个while,k做判断,两行式子
int qmi(int a, int k, int p)
{
//这里res必须初始化为1不能是0
int res = 1;
//k不为0的循环,里面仅三行,外面也只是初始化与返回res而已
while (k!=0)
{
////最后求出的幂结果实际上就是在变化过程中所有当指数k的二进制位数为1时的位数的底数的乘积。
比如a的k次方=所有的a的k二进制数位为1时的数位次方的数相乘
这里的话res是最终结果,而a就是一直更新到最新的二进制位数的那个值,符合条件就乘给res
if (k&1) res = res * a % p;//res取到新的a mod p的值
a = a * a % p;//更新a
//上面两行都是自身=自身*a%p
//k二进制数位向右消除一位
k >>= 1;
}
return res;
}
//int视情况换成long,double
简单易记就是,k是变动的关键,res负责收集结果,a跟上更新。