题目描述
求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。
输入描述:
可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。
输出描述:
对于每组数据,输出N的质因数的个数。
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int prime[100001];
bool mark[100001];
int cnt=0;
void init()
{
long long i,j;
for(i=2;i<100001;i++)
{
if(mark[i]==true) continue;
prime[cnt++]=i;
for(j=i*i;j<100001;j+=i)
{
mark[j]=true;
}
}
}
int main()
{
long long N;
init();
while(scanf("%lld",&N)!=EOF)
{
int ans=0;
int i;
for(i=0;i<cnt;i++)
{
while(N%prime[i]==0)
{
ans++;
N/=prime[i];
}
}
if(N!=1) ans++;//此处的ans++是必不可少的,因为我们只是求解了2-100000范围内的素数
//在此之外的素数我们并没有再计算了
//因此如果某个数存在一个大于100000的素因数
//那么这样的素因数有且只有一个,就是这个数自身
printf("%d\n",ans);
}
return 0;
}