NY187快速查詢素數
阿新 • • 發佈:2019-01-22
快速查詢素數
時間限制:1000 ms | 記憶體限制:65535 KB 難度:3- 描述
- 現在給你一個正整數N,要你快速的找出在2.....N這些數裡面所有的素數。
- 輸入
-
給出一個正整數數N(N<=2000000)
但N為0時結束程式。
測試資料不超過100組 - 輸出
-
將2~N範圍內所有的素數輸出。兩個數之間用空格隔開
- 樣例輸入
-
5 10 11 0
- 樣例輸出
-
2 3 5 2 3 5 7 2 3 5 7 11
-
解題思路:將不是素數的標記在陣列相應的位置,最後輸出沒有標記的位置即可。打表方法,每回將i*j位置標記,因為它肯定不是素數,最少有倆個因子i和j。
-
#include <stdio.h> #include <stdlib.h> int a[2000001]; void seek() { int i,j; for(i=2;i<1000000;i++) { if(!a[i])//關鍵!已經賦值過1就不需要重複遍歷了,否則就超時!!! for(j=2;i*j<=2000000;j++) a[i*j] = 1;//i*j意味著此數肯定不是素數! } } int main() { seek(); int n,i; while(scanf("%d",&n)!=EOF && n) { for(i=2;i<=n;i++) { if(!a[i]) printf("%d ",i); } printf("\n"); } return 0; }