求组合数C(n,m)有多少个不同的质因子。
C(n,m)=n!/( m!*(n-m)! )
P(N!)=N/i+N/i^2+N/i^3+…..N/i^m是一个可以求N!中有多少个质因子i,例如7!中有4个质因子2,那么P(n!)=4;
既然知道了这个公式,枚举每个质数,分别求n!,m!,(n-m)!的质因子个数是否符合
P(n!)=p(m!)+p( (n-m)! )
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef long long LL;
const int N=1e6+7;
vector <int> v;
bool p[N];
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif // LOCAL
memset(p,0,sizeof(p));
for(int i=2;i<N;i++)
{
if(!p[i])
{
v.push_back(i);
for(int j=i*2;j<N;j+=i) p[j]=1;
}
}
int n,m;
while(~scanf("%d%d",&n,&m)&&n+m)
{
int l=v.size(),ans=0;
cout<<l<<endl;
for(int i=0;i<l;i++)
{
if(v[i]>n) break;
int x=n,y=m,z=n-m,num=0;
while(x) num+=x/v[i],x/=v[i];
while(y) num-=y/v[i],y/=v[i];
while(z) num-=z/v[i],z/=v[i];
if(num) ans++;
}
printf("%d\n",ans);
}
return 0;
}