nefu628 组合数取模,模不是素数的情况
2019-04-13 13:33发布
生成海报
传送门
题意:求C(m+n-2,m-1)%p,其中1<=m,n,p<=1e5,p不一定是素数
思路:数据范围并不是很大,但关键是p不一定是素数,所以传统求逆元的方法如费马小定理或者扩展欧几里得都不适用了,C(m+n-2,m-1)=(m+n-2)!/((n-1)!*(m-1)!),可以把这个数暴力分解素因子,计算其中包含的素因子个数,然后再用快速幂计算,累乘就得到了最后的结果。十分暴力。
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
const int maxn=1e6+5;
bool prime[maxn];
int p[maxn];
int cnt;
int mod;
void isprime()
{
cnt=0;
memset(prime,true,sizeof(prime));
for(int i=2;i>=1;
a=a*a%m;
}
return ans;
}
ll fun(ll n,ll m)///计算n!中m这个素因子的个数
{
ll ans=0;
while(n)
{
ans+=n/m;
n=n/m;
}
return ans;
}
ll solve(ll n,ll m,ll pp)
{
n=n+m-2;
m=m-1;
ll ans=1;
for(int i=0;i
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮