#include<stdio.h>
int Calculate(_int64 a,int b,int c);
int main()
{
int cycle_index;
while(scanf("%d",&cycle_index)!=EOF)
{
while(cycle_index--)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%d\n",Calculate(a,b,c));
}
}
}
int Calculate(_int64 base, int index, int c)
{
_int64 k=1;
base%=c;
while( index>1 )
{
if(index%2==1)
{
k*=base;
k%=c;
}
index/=2;
base*=base;
base%=c;
}
return (int)((k*base)%c);
}
怎么说,减少了循环次数,至少不是耗时最多的
偶数:(A)^B=(A*A)^(B/2)
奇数:(A)^B=(A*A)^(B/2)* A
注意小心A*A的时候超过int 的范围