快速查找素數 XYNUOJ

 

                                                1913: 快速查找素數

                                                                 時間限制: 4 Sec  內存限制: 64 MB
                                                                            提交: 165  解決: 61

                                                                                        [提交][狀態][討論版]

題目描述

現在給你一個正整數N,要你快速的找出在2.....N這些數裏面所有的素數。

輸入

給出一個正整數數N(N<=2000000) 但N爲0時結束程序。 測試數據不超過100組

輸出

將2~N範圍內所有的素數輸出。兩個數之間用空格隔開

 

重點:

素數的篩選法則

附AC代碼:

#include<stdio.h>
#include<string.h>
#include<math.h>

int a[2000000];
int main()
{ 
	int N;
	while(scanf("%d",&N))
	{
		if(N==0) break;
	
		int i;
		
    memset(a,0,sizeof(a));//關鍵步驟 
    a[1]=1;
    for( i=2; i<=sqrt(N); i++)
    {
        if(a[i]==0)
        {
            for(int j=2; j*i<=N; j++) 
            {
                a[i*j]=1;
            }
        }
    }//關鍵步驟 
    for(i=1;i<=N;i++)
    {
    	if(a[i]==0)
    	{
    		printf("%d ",i);
		}
	}
	printf("\n");
	}
	return 0;
}

 

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