问题描述:
求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。
思路:
- 判断N是否为质数。若为质数,则返回num+1;否则跳2
- 寻找N的质因数m(从2开始),num++
- N=N/m;跳至1
注:
判断N是否为质数:若N能被2到sqrt(N)中的任一数整除,则N不是质数;否则N是质数
实现:
#include <iostream>
#include <cmath>
using namespace std;
/*判断是否为质数*/
bool prime(int N)
{
if (N < 2)
return false;
if (N == 2)
return true;
int i;
for (i = 2; i < sqrt(N); i++)
{
if (N%i == 0) //i能被j整除,N不是质数
{
return false;
}
}
return true;
}
/*寻找质因数的个数*/
int factor_num(int N)
{
int i = 2;
int num = 0;
while (i < sqrt(N))
{
if (prime(N))//N为质数,循环退出
{
num++;
break;
}
if (N%i != 0 || !prime(i))//i不是N的因数 || i不是质数
{
i++;
continue;
}
if (prime(i))//i是N的一个质因数
{
num++;
N = N / i;
i = 2;
}
}
return num;
}
int main()
{
int N;
int i;
while (cin >> N)
cout << factor_num(N) << endl;
return 0;
}