牛客网刷题–质因数个数
题目描述
求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如120=22235,共有5个质因数。
输入描述:
可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。
输出描述:
对于每组数据,输出N的质因数的个数。
分析:
首先对于一个数n,可能因数只有可能是2~sqrt(n),所以考虑的数只在这个范围里。
其次,在如果i是n的质因素,那么将n一直除以i,等到的结果的因数里一定不再含有i,那么下一次处理从i+1开始。
很容易想到递归调用
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int N;
while(cin>>N){
int su=0;
int i=2;
for(int i=2;i<=sqrt(N);i++){
int a=N%i;
if(a==0){
su++;
N=N/i;
i = 1;
}
}
cout<<su+1<<endl;
}
}
while(i<(int)sqrt(N)){
int a = N%i;
if(a==0){
su++;
N=N/i;
}
else
i++;
}