POJ 2992 Divisors (因子个数)
2015-03-04 09:57
435 查看
题目:http://poj.org/problem?id=2992
题意:求C(n,k)的因子个数。n<=431
分析:将1!~431!的每个素因子的个数打表,而C(n,k)=n!/(k!*(n-k)!),再利用求因子个数的公式即可/article/2710032.html
代码:
题意:求C(n,k)的因子个数。n<=431
分析:将1!~431!的每个素因子的个数打表,而C(n,k)=n!/(k!*(n-k)!),再利用求因子个数的公式即可/article/2710032.html
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <vector> using namespace std; typedef long long LL; vector <int > vt; int a[440][440]; int prime[500],nprime; bool isprime[500]; void doprime() { nprime=0; LL i,j; for(i=1;i<500;i+=2) isprime[i]=true; isprime[1]=false; isprime[2]=true; for(i=2;i<500;i++) { if(isprime[i]) { prime[nprime++]=i; for(j=i*i;j<500;j+=i) isprime[j]=false; } } } void divd(int x) { vt.clear(); int i,j,t=x; for(i=0;i<nprime && prime[i]*prime[i]<=x;i++) { while(t%prime[i]==0) { vt.push_back(prime[i]); t/=prime[i]; } if(t==1) break; } if(t>1) vt.push_back(t); } void work() { int i,j; for(i=2;i<=431;i++) { memcpy(a[i],a[i-1],sizeof(a[i])); divd(i); for(j=0;j<vt.size();j++) a[i][vt[j]]++; } } int main() { doprime(); work(); int n,k,i,j; LL ans; int use[500]; while(scanf("%d%d",&n,&k)!=EOF) { memset(use,0,sizeof(use)); for(i=2;i<=431;i++) use[i]+=a [i]-a[k][i]-a[n-k][i]; ans=1; for(i=2;i<=431;i++) ans*=(use[i]+1ll); printf("%lld\n",ans); } return 0; }
相关文章推荐
- POJ 2992 Divisors (快速求阶乘的素因子)
- Poj2992Divisors 组合数求因子的个数
- POJ 2992 Divisors 解题报告(素因子统计)
- poj 2992 Divisors(求组合数的因子个数)
- POJ 2992 Divisors(阶乘的素因子分解)
- POJ 2992 Divisors(求组合数因子个数)
- POJ 2992 Divisors 求组合数因子个数
- POJ 2992 Divisors[组合数 因子个数]
- POJ 题目2992 Divisors(组合数因子个数)
- POJ 2992 Divisors (求因子个数)
- POJ_2992_Divisors(组合数的因子数)
- poj 2992 Divisors (素数打表+阶乘因子求解)
- POJ 2992 : Divisors - 求组合数的因子个数
- POJ 2992 : Divisors - 求组合数的因子个数
- poj 2992 Divisors n!的因子个数的计算
- poj 2992 Divisors(求因子个数)
- POJ 2992 Divisors (因子个数)
- (Relax 数论1.16)POJ 2992 Divisors(C[N][K]中含素数的个数)
- poj 2992 Divisors 整数分解
- poj 2992 Divisors