http://ac.jobdu.com/problem.php?cid=1040&pid=53
-
题目描述:
-
求正整数N(N>1)的质因数的个数。相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。
-
输入:
-
可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。
-
输出:
-
对于每组数据,输出N的质因数的个数。
-
样例输入:
-
120
-
样例输出:
-
5
-
提示:
-
注意:1不是N的质因数;若N为质数,N是N的质因数。
// 题目54:质因数的个数.cpp: 主项目文件。
#include "stdafx.h"
#include <cstdio>
#include <cstring>
const int N=31650;
bool used[N];
void selectPrime()
{
memset(used,0,sizeof(used));
used[0]=used[1]=true;
for(int i=2;i<N;i++)
{
if(!used[i])
{
for(int j=i+i;j<N;j+=i)
used[j]=true;
}
}
}
int primeBaseCount(int n)
{
int ans=0;
for(int i=2;i<N;i++)
{
if(n==1)
break;
if(!used[i])
{
while(n%i==0)
{
ans++;
n/=i;
}
}
}
if(n!=1)
ans+=1;
return ans;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int res=primeBaseCount(n);
printf("%d\n",res);
}
return 0;
}