快速幂(240819)
原理:\(3^ {10_{(10)}}=3^{1010_{(2)}}\)
\(3^{10}=3*3*3*3*3*3*3*3*3*3=3^2*3^8\)
1010第一位为0,ans不操作,num*=num(num:0001->0010)
1010第二位为1,ans=ans*num=\(3^2\),num *=num(ans:0010,num:0010->0100)
1010第三位为0,num*=num=(num:0100->1000)
1010第四位为1,ans*=sum=\(3^2 * 3^8\)(ans:1010,sum:1000)
ll po(ll x,ll y){
ll ans=1;
while(y){//还有指数没清
if(y%2==1){//此位为1
ans=(ans*x)%m;
}
x=(x*x)%m;//下一位
y/=2;//分解
}
return ans%m;
}
可以自由转载

浙公网安备 33010602011771号