1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
#include <cstdio> using namespace std; int (int a, int b) { return b == 0 ? a : gcd(b, a % b); } int qpow(int a, int x, int mo) { int res = 1; while (x) { if (x & 1) res = 1ll * res * a % mo; a = 1ll * a * a % mo; x >>= 1; } return res; } int phi(int x) { int res = x; for (int i = 2; i * i <= x; i++) if (x % i==0) { res = res - res / i; while (x % i == 0) x /= i; } if (x > 1) res = res - res / x; return res; } int solve(int a, int b, int m) { if(b==0) return 1; if(m==1) return 0; int pp=phi(m); int t=solve(a,b-1,pp); if(t<pp&&t) return qpow(a,t,m); return qpow(a,t+pp,m); } int a, b, m, T; int main() { scanf("%d", &T); while (T--) { scanf("%d%d%d", &a, &b, &m); printf("%dn",solve(a, b, m)%m); } }
|
近期评论