NYOJ 520 最大素因子
阿新 • • 發佈:2019-01-08
最大素因子
時間限制: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; }