求助 WAon#1
查看原帖
求助 WAon#1
464142
Executor_Dragon楼主2023/8/22 11:16
#include<bits/stdc++.h>
using namespace std;
int p;
long long inv[2000050]={0,1},f[1000000];
long long fac(int x)
{
	if(!x) return 1;
	if(f[x]) return f[x];
	long long ans=1;
	for(int i=1;i<=x;i++)
	{
	    ans*=i;
	    ans%=p;
	}
	return f[x]=ans;
}
int C(int n,int m)
{
    if(m>n) return 0;
	return fac(n)*inv[fac(m)]%p*inv[fac(n-m)]%p;
}
int lucas(int n,int m)
{
	return m==0?1:C(n%p,m%p)*lucas(n/p,m/p)%p;
}
int main()
{
	int n,m,t;
	cin>>t;
	for(int i=1;i<=t;i++)
	{
		cin>>n>>m>>p;
		for(int i=2;i<=n+m;i++)
		    inv[i]=(long long)(p-p/i)*inv[p%i]%p;
		cout<<lucas(n+m,n)<<'\n';
	}
  return 0;
}
2023/8/22 11:16
加载中...