原文:http://blog.sina.com.cn/s/blog_8619a25801010wcy.html
计算x^ymod n;如果采用常规方法,当x与y都比较小的情况下,采用直接计算可以,但是如果当x跟y都非常大的时候,如2^1000mod 100000,那该如何解决呢?
#define LL long long int
LL exp_mod( LL x , LL y , LL n ){
LL ret=1;
while(y){
if(y&1) ret=(ret*x)%n;
x=(x*x)%n;
y=y>>1;
}
return ret;
}
#include <stdio.h>
#define LL long long int
LL exp_mod(LL x,LL y,LL n){
LL ret=1;
while(y){
if(y&1) ret=(ret*x)%n;
x=(x*x)%n;
y=y>>1;
}
return ret;
}
int main(){
LL a,b,k,ans;
while(scanf("%lld%lld%lld",&a,&b,&k)==3){
ans=exp_mod(a,b,k-1);
if(ans==0) ans=k-1;
printf("%lld\n",ans);
}
return 0;
}
-----------Amazing Mathematics