一、在f函数里,运算值可以超出int型,所以不能直接用a运算,应该换成__int64 定义的又一变量
错误的代码,正确的在下面
#include<stdio.h>
__int64 f(int a,int b,int c)
{
__int64 sum=1;
a=a%c;
while(b>0)
{
if(b%2==1) sum=(sum*a)%c;
a=(a*a)%c;
b/=2;
}
return sum;
}
int main()
{
int t;__int64 a,b,c,sum;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&a,&b,&c);
sum=f(a,b,c);
printf("%I64d\n",sum);
}
return 0;
}
正确的代码
#include<stdio.h>
__int64 f(int a,int b,int c)
{
__int64 sum=1,e;
e=a;
e=e%c;
while(b>0)
{
if(b%2==1) sum=(sum*e)%c;
e=(e*e)%c;
b/=2;
}
return sum;
}
int main()
{
int t,a,b,c;
__int64 s;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&a,&b,&c);
s=f(a,b,c);
printf("%I64d\n",s);
}
return 0;
}