1. 程式人生 > >NYOJ 520 最大素因子

NYOJ 520 最大素因子

最大素因子

時間限制:1000 ms  |  記憶體限制:65535 KB 難度:2
描述

GreyAnts最近正在學習數論中的素數,但是現在他遇到了一個難題:給定一個整數n,要求我們求出n的最大素因子的序數,例如:2的序數是1,3的序數是2,5的序數是3,以此類推. 研究數論是需要很大的耐心的,為了懲罰那些沒有耐心讀完題目的童鞋,我們規定:1的最大素因子序數是0.

輸入
有多組測試資料,每一行輸入一個數字n.(0<n<=1000000)
輸出
在接下來的一行,輸出結果.
樣例輸入
2
3
4
5
樣例輸出
1
2
1
3

 題目的意思一定要看清楚,本題說的是求一個數的因子中最大的素數的序數。比如(4的最大素因子是2,2在素數中的序數又是1,即輸入4,輸出1)

表示自己智商有限,首先就沒看懂題目,在研究AC程式碼的時候,結合程式碼才看清楚題目。

程式碼的解題思路很巧妙,具體如下:

#include<stdio.h>
#define max 1000010
int a[max]={0};

void num_prime()
{
	int i,j,x=0;
	for(i=2;i<max;i++)
	{
		if(!a[i])
		{
			x++;
			for(j=i;j<max;j=j+i) //素數的整倍數的最大素因子可能是該素數  
			   a[j]=x;   //更新素數對應的出現的次序  
		}
	}
}

int main()
{
	num_prime();
	int n;
	while(scanf("%d",&n)!=EOF)
	   printf("%d\n",a[n]);
	return 0;
}