POJ 2992 質因子分解
題意要求出C(n,k)的因子個數 所以就需要把C(n,k)質因子分解 這題數據非常變態 我的思路沒問題但是無數次TLE之後我才發現應該先打出一個 n!的一個表 不然就超時 用C(n,k)=n!/(k!*(n-k)!) 這個公式就可以求出
#include <iostream> #include<cstdio> #include<cstring> using namespace std; #define max 435 int prime[max],nprime; bool isprime[max]; void getprime() { long long i,j; memset(isprime,1,sizeof(isprime)); isprime[1]=0; nprime=0; for(i=2; i<max; i++) if(isprime[i]) { prime[++nprime]=i; for(j=i*i; j<max; j+=i) isprime[j]=0; } } long long a[435][435]; void getnum() { memset(a,0,sizeof(a)); for(int s=1; s<=431; s++) { int x=s; memcpy(a[s],a[s-1],sizeof(a[s])); if(isprime[x]) { a[s][x]++; continue; } for(int i=1; prime[i]<=x,x>1; i++) while(x%prime[i]==0&&prime[i]>0) { a[s][prime[i]]++; x/=prime[i]; } } } int main() { getprime(); getnum(); int n,k; long long ans; while(~scanf("%d%d",&n,&k)) { ans=1; for(int i=2; i<=n; i++) if(a[n][i]-a[k][i]-a[n-k][i]) ans*=(a[n][i]-a[k][i]-a[n-k][i]+1); printf("%lld\n",ans); } return 0; }
最後更新:2017-04-04 07:03:42