1947 Problem C 質因數的個數

問題 C: 質因數的個數

時間限制: 1 Sec  內存限制: 32 MB

題目描述

求正整數N(N>1)的質因數的個數。

相同的質因數需要重複計算。如120=2*2*2*3*5,共有5個質因數。

輸入

可能有多組測試數據,每組測試數據的輸入是一個正整數N,(1<N<10^9)。

輸出

對於每組數據,輸出N的質因數的個數。

樣例輸入

120
200

樣例輸出

5
5

提示

注意1不是N的質因數;若N爲質數,NN的質因數。

經驗總結

基礎的質因子分解,分解完成後,統計所有質因子的數量即可~~

AC代碼

#include <cstdio>
#include <cmath>
const int maxn=1000001;
int p[maxn]={0},prime[maxn],num=0;
void Find_Prime()
{
	for(int i=2;i<maxn;i++)
	{
		if(p[i]==false)
		{
			prime[num++]=i;
			for(int j=i+i;j<maxn;j+=i)
				p[j]=true;
		}
	}
}
struct factor
{
	int cnt,x;
}fac[10];
int main()
{
	int n;
	Find_Prime();
	while(~scanf("%d",&n))
	{
		int no=0;
		int sqr=(int)sqrt(1.0*n);
		for(int i=0;i<num&&prime[i]<=sqr;i++)
		{
			if(n%prime[i]==0)
			{
				fac[no].cnt=0;
				fac[no].x=prime[i];
				while(n%prime[i]==0)
				{
					fac[no].cnt++;
					n/=prime[i];
				}
				no++;
			}
			if(n==1)	break;
		}
		if(n!=1)
		{
			fac[no].x=n;
			fac[no++].cnt=1;
		}
		int count=0;
		for(int i=0;i<no;i++)
			count+=fac[i].cnt;
		printf("%d\n",count);
	}
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章