#include<cstdio>
int Bnum(int A[],int b)//求b的二进制展开
{
int i=0;
while(b!=0)
{
A[i++]=b%2;
b/=2;
}
return i;
}
int modR(int A[],int len,int m,int a)//求a^b mod m
{
int i,result=1;
int power=a%m;
for(i=0;i<len;i++)
{
if(A[i])//1即保存结果
result=(result*power)%m;
power=(power*power)%m;//每次以平方递增,符合b的二进制展开
}
return result;
}
int main()
{
int a,b,m,A[50];
while(scanf("%d%d%d",&a,&b,&m)!=EOF)
{
int len=Bnum(A,b);
printf("%d\n",modR(A,len,m,a));
}
return 0;
}
同余幂
最新推荐文章于 2023-06-03 00:46:20 发布