SCU 3578 H1N1's Problem
3578: H1N1's Problem
Description |
H1N1 like to solve acm problems.But they are very busy, one day they meet a problem. Given three intergers a,b,c, the task is to compute a^(b^c))%317000011. 1412, ziyuan and qu317058542 don't have time to solve it, so the turn to you for help. |
InputThe first line contains an integer T which stands for the number of test cases. Each case consists of three integer a, b, c seperated by a space in a single line. 1 <= a,b,c <= 100000 |
OutputFor each case, print a^(b^c)%317000011 in a single line. |
Sample Input2 1 1 1 2 2 2 |
Sample Output1 16
|
快速幂+欧拉函数
地址 http://cstest.scu.edu.cn/soj/problem.action?id=3578
因为317000011为质数,所以对他求欧拉函数就是本身减一。直接两次快速幂,一开始类型没注意用longlong结果TLE了好几次,也是教训吧。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<string> 6 #include<queue> 7 #include<algorithm> 8 #include<map> 9 #include<iomanip> 10 #include<climits> 11 #include<string.h> 12 #include<numeric> 13 #include<cmath> 14 #include<stdlib.h> 15 #include<vector> 16 #include<stack> 17 #include<set> 18 #define INF 1e7 19 #define MAXN 100010 20 #define maxn 1000010 21 #define Mod 1000007 22 #define N 1010 23 using namespace std; 24 typedef long long LL; 25 26 LL quick_pow(LL a, LL n, LL mod) 27 { 28 LL sum = 1; 29 while (n) 30 { 31 if (n & 1) sum = (sum*a)%mod; 32 a = (a%mod*a%mod) % mod; 33 n >>= 1; 34 } 35 return sum%mod; 36 } 37 38 void run() 39 { 40 LL a, b, c, ans; 41 scanf("%lld%lld%lld",&a,&b,&c); 42 ans = quick_pow(a, quick_pow(b, c, 317000010), 317000011); 43 printf("%lld\n",ans); 44 } 45 46 int main() 47 { 48 int T; 49 scanf("%d", &T); 50 while (T--) 51 run(); 52 return 0; 53 }