蒟蒻刚学oi一分钟 lucas定理爆0求助TwT
查看原帖
蒟蒻刚学oi一分钟 lucas定理爆0求助TwT
632760
ivoleuoy楼主2022/8/19 17:53
#include<bits/stdc++.h>
using namespace std;
const int MAXN=100001;
long long base,x,y,ans=1,p,n,m,a,b;
long long Lucas[MAXN],cnt=1;
inline long long fastpow(long long x,long long y)
{
	base=x;
	while(y)
	{
		if(y&1) ans=ans*base%p;
		base=base*base%p;
	    y/=2;
	}
	return ans;
}
inline long long C(long long n,long long m)
{
	if(n<m) return 0;
	if(m>n-m) m=n-m;
	a=1;b=1;
	for(int i=0;i<m;i++)
	{
		a=(a*(n-i))%p;b=(b*(i+1))%p;
	}
	return a*fastpow(b,p-2)%p;
}
inline long long lucas(long long n,long long m)
{
	if(m==0) return 1;
	return lucas(n/p,m/p)*C(n%p,m%p)%p;
}
int main()
{
	long long t;
	cin>>t;
	for(int i=1;i<=t;i++)
	{
		cin>>n>>m>>p;
		cout<<lucas(n+m,n)<<endl;
	}
	return 0;
}
2022/8/19 17:53
加载中...