题意:给定n和k,求C(n,k)的所有因子个数。 (0 ≤ k ≤ n ≤ 431)
思路:显然不能直接求,将C(n,k)化为n!/(k!*(n-k)!),先对431以内进行素数筛选,因为n!的因子个数等于(n-1)!的因子个数加n的因子个数,所以先打表求出阶乘的因子个数,然后就直接求了。
题目链接:
View Code
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 const int N=500;10 11 bool isprime[N];12 int prime[N],factor[N][N];13 int n,k,cnt;14 15 void getprime(){16 memset(isprime,false,sizeof(isprime));17 cnt=0;18 for(int i=2;i 1;j++){33 while(t%prime[j]==0){34 factor[i][prime[j]]++;35 t/=prime[j];36 }37 }38 }39 }40 41 int main(){42 43 // freopen("data.in","r",stdin);44 // freopen("data.out","w",stdout);45 46 getprime();47 getfactor();48 while(scanf("%d%d",&n,&k)!=EOF){ 49 long long ans=1;50 for(int i=1;prime[i]<=n;i++)51 ans*=(factor[n][prime[i]]-factor[k][prime[i]]-factor[n-k][prime[i]]+1);52 printf("%lld\n",ans);53 }54 return 0;55 }