poj_2992 Divisors
2013-05-21 22:38
344 查看
题目链接:http://poj.org/problem?id=2992
//C++代码 #include<iostream> #include<cstdio> using namespace std; bool a[432]; int num=0,p[100]; void prim(){ //素数筛法,筛选出1-431的素数 int i,j; for(i=0;i<432;i++) a[i]=true; for(i=2;i*i<432;i++){ if(a[i]){ j=i+i; while(j<432){ a[j]=false; j+=i; } } } for(i=2;i<432;i++){ if(a[i]) p[num++]=i; } } int np(int n,int p){ //n!中素数p的指数为[n/p]+[n/p^2]+...+[n/p^k],其中p^k<=n<p^(k+1) int t=p,count=0; while(t<=n){ count+=n/t; t*=p; } return count; } int main(){ prim(); int n,k,i; while(scanf("%d%d",&n,&k)!=EOF){ __int64 ans=1; //对于n=p1^a1*p2^a2*...*pk^ak,其中p1,p2,...,pk为素数,n的因子数为(a1+1)*(a2+1)*...*(ak+1) for(i=0;i<num && p[i]<=n;i++){ //C(n,k)=n!/(k!*(n-k)!) ans*=np(n,p[i])-np(k,p[i])-np(n-k,p[i])+1; } printf("%I64d\n",ans); } return 0; }
相关文章推荐
- ACM Computer Factory--POJ 3436
- POJ 1469 COURSES 解题报告
- POJ 2135 最小费用最大流
- POJ 1556
- poj 1200
- POJ题目分类推荐
- poj 2392 Space Elevator
- poj 2513Colored Sticks
- 树状数组 POJ 2481 Cows
- POJ 3628 Bookshelf 2
- POJ 3026 Borg Maze
- poj 2785
- POJ 1287 Networking(最小生成树)
- POJ 2318 (叉积) TOYS
- POJ 3225 (线段树 区间更新) Help with Intervals
- POJ 2823 Sliding Window 单调队列
- POJ 3744 Scout YYF I (概率dp+矩阵快速幂)
- POJ-3030
- POJ 1017 Packets (贪心)
- poj 8464 股票买卖(dp/分治)