cjweffort

博客园 首页 联系 订阅 管理

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;
}


posted on 2013-03-06 11:33  cjweffort  阅读(275)  评论(0编辑  收藏  举报