#include using namespace std; #define int long long #define endl "\n" // 求单个数字的欧拉函数 int phi(int x) { int res = x; for (int i = 2; i <= x / i; i++) if (x % i == 0) { res = res / i * (i - 1); while (x % i == 0) x /= i; } if (x > 1) res = res / x * (x - 1); return res; } // 快速幂 int qmi(int a, int b, int p) { int res = 1; a %= p; while (b) { if (b & 1) res = res * a % p; b >>= 1; a = a * a % p; } return res; } int check(int a, int b, int c) { int res = 1; while (b--) { res *= a; if (res >= c) return res; } return res; } // 递归求解f(n)%m int dfs(int n, int m) { if (n == 0) return 1; // 递归出口 int p = phi(m); // 每一层递归都要求出phi(m) int x = dfs(n / 10, p); // 下一层依赖项 int y = check(n % 10, x, m); if (y >= m) { // 符合欧拉定理要求 int res = qmi(n % 10, x + p, m); // 开始套公式计算 if (res == 0) res += m; // 快速幂等于0,说明是m的整数倍,此时保留m return res; } else return y; // 不比m大,就是原来的y值 } signed main() { int T; cin >> T; while (T--) { int a, c; cin >> a >> c; cout << dfs(a, c) % c << endl; } }