fzu1752(坑!!!)
Description
Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,B,C<2^63).
Input
There are multiply testcases. Each testcase, there is one line contains three integers A, B and C, separated by a single space.
Output
For each testcase, output an integer, denotes the result of A^B mod C.
Sample Input
3 2 42 10 1000
Sample Output
124
这题太坑了,不想说了!!!!!!数据大的可以卡死你
#include <iostream> #include<stdio.h> using namespace std; typedef __int64 ll; ll quick(ll a,ll b,ll n) { a=a%n; b=b%n; ll ans=0; while(b) { if(b&1) { ans=ans+a; if(ans>n)ans-=n; } a=a<<1; if(a>=n) a-=n; b>>=1; } return ans; } int main() { ll a,b,n,ans; while(scanf("%I64d%I64d%I64d",&a,&b,&n)>0) { ans=1; a=a%n; while(b) { if(b&1) ans=quick(ans,a,n); a=quick(a,a,n); b>>=1; } printf("%I64d\n",ans); } return 0; }
持续更新博客地址:
blog.csdn.net/martinue