快速幂:a*b%p和a^b%p**
理解:所谓快速幂,就是解决大数运算的一种思想,更形象的理解为:位运算,而这个位是按二进制来看的位,比如 8 = 2^3 1+2^ 2 0+2^ 10+2^00;即按二进制表示为:1000
还可以理解 7634%5 =(76%5)*(34%5)%5 只是我们将其用了二进制来减少b,也就是循环次数,从而降低复杂度
【a^b%p】
在这里插入代码片
long long int a,b,p;
scanf("%lld %lld %lld",&a,&b,&p);
long long int ans=1;
while(b)
{
if(b%2==1) ans=ans*a%p;//如果是2的倍数,就把多的那个a乘到ans里
a=a*a%p;
b=b/2;//移到下一位,虽然b/2,但是我们的ans同时也再乘了个a,这里的b指的是乘 a的个数
}
printf("%lld",ans%p);
【a*b%p】
long long int a,b,p,ans = 0;
scanf("%lld\n%lld\n%lld",&a,&b,&p);
while(b)
{
if(b%2==1) ans=(ans+a)%p;
a=a*2%p;
b/=2;
}
printf("%lld",ans);