//当b=7时,a^b=a^7=a^4*a^2*a^1,a^(4+2+1),
#include<bits/stdc++.h>
int arr[50];
int lens=0;
//将b转换为2进制
void convert(int n){
while(n>0){
arr[++lens]=n%2;
n/=2;
}
}
using namespace std;
int main(){
//freopen("t1.in","r",stdin);
//freopen("t1.out","w",stdout);
int a,b,p;
scanf("%d%d%d",&a,&b,&p);
convert(b);
long long ans=1;//表示结果
long long x=a;// x:存储a的_次方
for(int i=1;i<=lens;i++){
if(arr[i]==1){//二进制位为1时,说明有该位
ans=(ans*x)%p;
}
x=((x%p)*(x%p))%p;//算出(x*x)后再%p会超范围,((x%p)*(x%p))%p=(x*x)%p
}
ans=ans%p;
printf("%d^%d mod %d=%lld",a,b,p,ans);
return 0;
}
P1226 快速幂
最新推荐文章于 2024-09-02 16:35:28 发布