超大数次幂再求余

来源:互联网 发布:菜青虫 网络歌坛 编辑:程序博客网 时间:2024/04/28 16:36


H - Super A^B mod C
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
Submit Status

Description

Given A,B,C, You should quickly calculate the result of A^B mod C. 

(1<=A,C<=1000000000,1<=B<=10^1000000).

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 <stdio.h>unsigned __int64 mul (unsigned __int64 a,unsigned __int64 b,unsigned __int64 c){ unsigned __int64 res=0,tmp=a%c;while(b) {if(b&1 && (res+=tmp) >= c) res -= c;if((tmp <<= 1) >= c) tmp -= c;b>>=1; }return res;}int main(void){ unsigned __int64 a,b,c,y; while (scanf("%I64u %I64u %I64u",&a,&b,&c)!=EOF) {y = 1;while(b) {if(b&1) y = mul (y,a,c);a=mul(a,a,c);b>>=1; }printf("%I64u\n",y%c); }return 0;}


0 0
原创粉丝点击