#include using namespace std; #define int long long #define endl "\n" // 快速幂 int qmi(int a, int k, int p) { int res = 1; while (k) { if (k & 1) res = res * a % p; a = a * a % p; k >>= 1; } return res; } // 功能:组合数模板 int C(int a, int b, int p) { if (a < b) return 0; int down = 1, up = 1; for (int i = a, j = 1; j <= b; i--, j++) { up = up * i % p; down = down * j % p; } return up * qmi(down, p - 2, p) % p; } // Lucas公式 int lucas(int a, int b, int p) { if (a < p && b < p) return C(a, b, p); return C(a % p, b % p, p) * lucas(a / p, b / p, p) % p; // 递归套用公式 } int n, p; signed main() { cin >> n; while (n--) { // n组询问 int a, b; cin >> a >> b >> p; cout << lucas(a, b, p) << endl; // 利用lucas公式计算组合数 } return 0; }