組合數的不同質因子

求組合數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;

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章