-
题目描述:
-
求正整数N(N>1)的质因数的个数。相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。
-
输入:
-
可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。
-
输出:
-
对于每组数据,输出N的质因数的个数。
-
样例输入:
-
120
-
样例输出:
-
5
-
提示:
-
注意:1不是N的质因数;若N为质数,N是N的质因数。
-
来源:
-
2007年清华大学计算机研究生机试真题
// 质因数的个数.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <algorithm> using namespace std; int prime[10001]; bool mark[10001]; int primesize; void init(int x){ for (int i = 0; i < x; i++) { mark[i]=false; //初始化标记数组 } primesize=0; for(int i=2;i<=x;i++){ if (mark[i]==true) //如果被标记了,则不是素数,执行下一次循环 continue; prime[primesize++]=i;//将素数存入数组里面 for (int j = i*i; j <=x; j+=i)//如果这个数字是素数,那么将其倍数的所有数字都标记为非负数 { mark[j]=true; } } } int main(){ int n; while (scanf("%d",&n)) { init(n); int sum=0; for (int i = 0; i <primesize ; i++) { while(n%prime[i]==0) { sum++; n/=prime[i]; } } printf("%d",sum); }return 0; }