求C的公式是C(n,m)=n!/m!(n-m)!
直接3个for写,到20数据就会溢出
因为刷题多次用到了,所以记录一下算法捏
nn(a,b)表示a内b的整数倍的个数
算法很简单,直接看代码就完事力
#include <bits/stdc++.h>
using namespace std;
int n,m,sus,sushu[100005];
long long C(int a,int b);
bool jl[100005];
int nn(int a,int b);
int main() {
ios::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> m;
for(int i=2;i<=100000;i++)
{
if(!jl[i])
{
jl[i]=true;
for(int j=i*2;j<=100000;j+=i)
{
jl[j]= true;
}
sushu[sus]=i;
sus++;
}
}
cout<<C(n,m)<<endl;
}
long long C(int a,int b)
{
long long ans=1;
for(int i=0;i<sus;i++)
{
int k=nn(b,sushu[i])- nn(b-a,sushu[i])- nn(a,sushu[i]);
for(int j=1;j <=k;j++)
{
ans=ans*sushu[i];
}
}
return ans;
}
int nn(int a,int b)
{
int ans=0;
while(a>0)
{
a/=b;
ans+=a;
}
return ans;
}