题目描述
求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。
输入描述:
可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。
输出描述:
对于每组数据,输出N的质因数的个数。
示例1
输入
120
输出
5
解题思路
这几道题做过很多遍了但还是经常见到它。这次在做的时候才发现是不需要判断因数是否为质数的!这样能省不少事~总结几点:
1、质因数的遍历范围是2到sqrt(n),这样时间复杂度大大降低;
2、因为是从小到大的顺序找的所以肯定都是质因数(无需再用函数判断),否则在之前就已经在while循环里被除掉了。
3、当每找到一个质因数以后,立刻整除掉它,紧接着增加质因数个数。
4、如果遍历到了sqrt(n)时还是大于1,则肯定还剩最后一个质因数。比如计算120的质因数个数时,最后计算到n=5,2<sqrt(5)<3,而之前i=3(因为120=2*2*2*3*5),所以i循环已结束,最后剩下的那个质因数就是5。
代码实现
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll n;
int count;
while(cin >> n){
count = 0;
for(ll i = 2; i <= sqrt(n); i++){
while(n % i == 0){
n = n/i;
count++;
}
}
if(n > 1)
count++;
cout << count << endl;
}
return 0;
}
继续ヾ(◍°∇°◍)ノ゙加油!