时间限制:1 秒
内存限制:32 兆
题目描述:
求正整数N(N>1)的质因数的个数。
相同的质因数需要重复计算。如120=22235,共有5个质因数。
输入:
可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。
输出:
对于每组数据,输出N的质因数的个数。
样例输入:
120
样例输出:
5
提示:
注意:1不是N的质因数;若N为质数,N是N的质因数。
来源:2007年清华大学计算机研究生机试真题
答疑:解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7930-1-1.html
来源: http://ac.jobdu.com/problem.php?pid=1207
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| #include <stdio.h> int prime[10000]; int primeSize; char mark[10001]; void init() { int i=1; for(; i<=10000; ++i) mark[i]=0; primeSize=0; for(i=2; i<=10000; ++i) { if(mark[i]) continue; prime[primeSize++]=i; int j=i*i; for(; j<=10000; j+=i) mark[j]=1; } } int main() { #ifndef ONLINE_JUDGE freopen("E:\\jsj\\cprojects\\docs\\in.txt","r",stdin); #endif init(); int n,i; while(~scanf("%d",&n)) { int ansSize=0; int ansNum[30]; for(i=0;i<primeSize;++i) { if(n%prime[i]==0) { ansNum[ansSize]=0; while(n%prime[i]==0) { ansNum[ansSize]++; n/=prime[i]; } ansSize++; if(n==1) break; } } if(n!=1) { ansNum[ansSize++]=1; } int ans=0; for(i=0;i<ansSize;++i) ans+=ansNum[i]; printf("%dn",ans); } return 0; }
|