a^b mod c
时间复杂度:O()
#include<stdio.h>
int main()
{
long long int a,b,c,temp=1;
scanf("%lld %lld %lld",&a,&b,&c);
a%=c; //为了防止输入a过大,此处直接将a取模
while(b){
if(b&1){ //位运算提高执行效率,等价于b%2==1,本质是判断b是否为奇数
temp=(temp*a)%c;
}
a=(a*a)%c;
b/=2; //本应为(b-1)/2,利用整除缩写
}
temp%=c;
printf("%lld",temp);
}
实现部分流程:

对每一步乘法做取模运算,防止变量超界,原理如下:
