1. 程式人生 > >NY187快速查詢素數

NY187快速查詢素數

快速查詢素數

時間限制: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;
}