描述
求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。
输入描述:
可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。
输出描述:
对于每组数据,输出N的质因数的个数。
示例1
输入:
120
输出:
5
#include <iostream>
#include <string>
#include <stack>
#include <valarray>
using namespace std;
bool f(int a) { //判断是不是素数
if (a <= 1) {
cout << "no";
return false;
}
double bound = sqrt(a);
for (int i = 2; i <= bound; ++i) {
if (a % i == 0) {
return false;
}
}
return true;
}
int su(int a, int b) { // 返回a~b之间的第一个素数,包括a
for (int i = a; i < b; ++i) {
if (f(i)) {
// cout<<"i:"<<i<<endl;
return i;
}
}
return -1;
}
int main() {
int a, sum = 0, i = 2;
cin >> a;
int x = a;
while (a != 1) {
int t = su(i, x);
if (a % t == 0) {
// cout<<"t:"<<t<<endl;
a = a / t;
sum++;
if (f(a)) { //判断a此时是不是素数,是的话直接结束,会更省时间,不然数特别大的时候会超过1s,会超时
sum++;
break;
}
i = 2;
} else {
i++;
}
}
cout << sum;
}