题目:https://www.luogu.org/problemnew/show/P3807
题解:https://www.luogu.org/problemnew/solution/P3807
#include<bits/stdc++.h> using namespace std; int p; long long jc[100004]; inline long long pow(long long a,int b){ long long ans=1; while(b){ if(b&1) ans=(ans*a)%p; a=(a*a)%p; b>>=1; } return ans; } inline long long C(long long n,long long m){ if(m>n) return 0; return (jc[n]*pow(jc[m],p-2))%p*pow(jc[n-m],p-2)%p; } inline long long lucas(long long n,long long m){ if(!m) return 1; return C(n%p,m%p)*lucas(n/p,m/p)%p; } int main(){ int T;scanf("%d",&T); while(T--){ int n,m;scanf("%d%d%d",&n,&m,&p); jc[0]=1; for(int i=1;i<=p;i++) jc[i]=(jc[i-1]*i)%p; printf("%d ",lucas(n+m,min(n,m))); } }