算法入门笔记:快速幂基础
//计算(d^z)%mod,d,z为正
#include<iostream>
using namespace std;
int main()
{
long long ans = 1; //用来存放指数是奇数时的底数
long long d, z, mod;
while (z) {
if (z & 1) //位运算 判断指数是否是奇数 若是则执行
ans = ans * d % mod; //用ans存放每当指数为奇数时的底数 相当于是奇数时 提一个底数出来,如:2^9=2^8*2
d = d * d % mod; //每一次处理完奇数 指数都变成了偶数 这时候再将偶数拆开,如:2^10=(2^2)^5 相当于底数平方 指数除以2
z >>= 1; // 底数每一次平方后 指数都除以2 这里是位运算 >>为除以2 <<为乘以2 后面的1就是2^1
}
return ans;
} //这里只是做个提示思路 代码并没有跑