Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,B,C<2^63).
There are multiply testcases. Each testcase, there is one line contains three integers A, B and C, separated by a single space.
For each testcase, output an integer, denotes the result of A^B mod C.
为了防止相乘溢出,所以就用加减来实现,此外这个oj不支持%lld 我在这里也出错了几次,大家要注意哦 !!
#include<stdio.h>using namespace std;#define ll long longll mulmod(ll a,ll b,ll c){ ll ans=0; while(b) { if(b&1) { ans+=a; if(ans>=c) ans-=c; } a<<=1; if(a>=c) a-=c; b>>=1; } return ans;}ll quickmod(ll a,ll b,ll c){ ll ans=1; while(b) { if(b&1) ans=mulmod(ans,a,c);//这样写是为了使a*ans和a*a不溢出 a=mulmod(a,a,c); b>>=1; } return ans;}int main(){ ll a,b,c ; while(~scanf("%I64d%I64d%I64d",&a,&b,&c)) { a=a%c; printf("%I64d/n",quickmod(a,b,c)); } return 0;}
新闻热点
疑难解答