uva10006
快速幂乘法,虽然每一步乘法后都取余,但是仍然可能溢出
#include<cstdio>
#include<cmath>
using namespace std;
int expmod(int _a,int n,int mod){
long long a=_a,ans=1;
while(n){
if(n%2){ans*=a; ans%=mod;}
n/=2; a*=a; a%=mod;
}
}
int main(){
int a,n,mod;
while(scanf("%d%d%d",&a,&n,&mod)==3)
printf("%d\n",expmod(a,n,mod));
return 0;
}
上述代码只是为了展示快速幂。
不要以为取余就万事大吉,仍然可能溢出,所以要用long long过渡