Problem 1752 A^B mod C
Accept: 837 Submit: 3615
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem 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
Source
FZU 2009 Summer Training IV--Number Theory
题解:
大数据处理,次方用乘法,乘法用加法,保证不爆。
#include<stdio.h> #define ll unsigned __int64 ll mul(ll a,ll b,ll c) { ll tmp=a%c,tre=0; while(b) { if(b&1) if((tre+=tmp)>=c) tre-=c; if((tmp<<=1)>=c) tmp-=c; b>>=1; } return tre; } ll mod(ll a,ll b,ll c) { ll y=1; a=a%c; while(b) { if(b&1) y=mul(y,a,c); a=mul(a,a,c); b>>=1; } return y; } int main() { ll a,b,c; while(~scanf("%I64u%I64u%I64u",&a,&b,&c)) { printf("%I64u\n",mod(a,b,c)); } return 0; }
版权声明:本文为博主原创文章,随便转载。
时间: 2024-09-30 11:39:51