1 #include<cstdio>
2 #include<iostream>
3 #include<cstring>
4 #include<algorithm>
5 using namespace std;
6 const int maxn = 10005; //如果是1005就会RE,当不确定时,最好取大点。
7 int A[maxn];
8 #define LL unsigned long long // 注意不能用long long, 因为long long
9 // 最大值只能取到2 ^63 - 1
10 LL a, b;
11 int n, mod, T, t;
12
13 int Period()
14 {
15 A[0] = 0, A[1] = 1 % mod; //这里的取值也是要细心的。
16 int i = 2;
17 while(1)
18 {
19 A[i] = (A[i-1]+A[i-2]) % mod;
20 if(A[i] == A[0] && (A[i-1]+A[i])%mod == A[1]) return i;
21 i ++;
22 }
23 return 1;
24 }
25
26 int Pow(int x,LL n)
27 {
28 int ans = 1;
29 while(n)
30 {
31 if(n & 1) ans *= x;
32 x *= x, n >>= 1;
33 ans %= mod, x %= mod;
34 }
35 return ans;
36 }
37
38 int main()
39 {
40 scanf("%d", &t);
41 while(t --)
42 {
43 //scanf("%I64d %I64d %d", &a, &b, &n); 这两种方式在UVa中交都是WA,
44 //scanf("%lld %lld %d", &a, &b, &n); 特别注意当不确定时,最后用cin;
45 cin >> a >> b >> n;
46 mod = n;
47 T = Period(); //求出周期
48 mod = T;
49 int x = Pow(a%mod, b); //x为第一个周期中对应值的下标
50 printf("%d\n", A[x]);
51 }
52 return 0;
53 }