//当b为偶数时,a^b可以转为a^2的b/2次方。 //当b为奇数时,a^b可以转为a^2的b/2次方,再乘以a。 //(a + b) % p = (a % p + b % p) % p (1) //(a - b) % p = (a % p - b % p ) % p (2) //(a * b) % p = (a % p * b % p) % p (3) //a ^ b % p = ((a % p)^b) % p (4) #include <bits/stdc++.h> using namespace std; // 定义幂模运算函数,计算 a^b % p long long mod_exp(long long a, long long b, long long p) { // 如果指数 b 为 0,则返回 1 if (b == 0) return 1; // 递归计算 b/2 次幂,结果对 p 取模 long long t = mod_exp(a, b / 2, p) % p; // 计算平方后对 p 取模,得到 t^2 % p t = (t * t) % p; // 如果指数 b 为偶数,则直接返回 t if (b % 2 == 0) return t; // 如果指数 b 为奇数,则需要额外乘以 a,并对结果再次对 p 取模 else return (a * t) % p; } int main() { // 输入询问次数 long long q; cin >> q; // 循环处理每个询问 while (q--) { long long a, b, p; // 输入底数、指数和模数 cin >> a >> b >> p; // 调用幂模运算函数计算结果,并输出 cout << mod_exp(a, b, p) % p << endl; } return 0; }