题目描述
求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。
输入描述
可能有多组输入数据,每组的测试数据是一个正整数N(1<N<10^9)
输出描述
对于每组测试数据,输出N的质因数的个数。
样例输入
120
样例输出
5
解题思路
(1)这道题可以直接打印素数表,但是要注意用sqrt(n)来降低复杂度,但是复杂度仍较高。
(2)因为任何一个合数都能被比它小的质数整除。当用小质数去分解给定的数时,就已经把他的合数因子分解了。也就是说程序中能整除的数都是质数。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n;
while (cin>>n)
{
int ans=0;
bool flag=true;
while (flag)
{
flag=false;
for(int i=2; i<=sqrt(n); i++) if (n%i==0)
{
flag=true;
n/=i;
ans++;
break;
}
}
if (n>1) ans++;
cout << ans<< endl;
}
return 0;
}