【篩選法+跑表】求素數

1010: 素數求解(20分)

時間限制: 1 Sec  內存限制: 128 MB
提交: 31  解決: 9
[提交][狀態][討論版][命題人:gyf]

題目描述

輸入數據有多行,每一行有兩個正整數,輸出兩個正整數範圍內的素數,沒有素數則輸出Not Found.

輸入

多行數據,每一行兩個正整數

輸出

範圍內的素數

樣例輸入

2 9
20 10
14 15

樣例輸出

<span style="color:#333333">2 3 5 7
11 13 17 19​
</span>

Not Found.

篩選法速度快

==有個小插曲,google自動翻譯把Not Found.主動翻成未找到==結果第一次沒對orz

#include<iostream>
using namespace std;
bool f[1005];
//標誌量,分別爲對應下標是否爲素數,有點像查表法,flag標誌是否找到素數 
int main()
{
	int n,m,lt,rt;
	//方便最後判斷,未找到就不變 
	while(cin>>n>>m)
	{
		bool flag=1;
		//判斷n,m那個大以確定區間範圍,問號表達式優先度低,多個以上加括號 
		n>m?(lt=m,rt=n):(lt=n,rt=m);
		//0和1不是素數 
		f[0]=0;f[1]=0;
		//篩選法核心,假設其他全爲素數,兩層循環相乘,出來的一定不是素數 
		for(int i=2;i<=rt;i++)
			f[i]=1; 
			
		for(int i=2;i<rt;i++)
		{
			if(f[i]==1)
			for(int j=2;j<rt;j++)
			{
				int t=i*j;
				if(t>rt)
				break;
				f[t]=0;
			}
		 } 
		 
		 for(int i=lt;i<=rt;i++)
		 	{
		 		if(f[i]==1)
		 		{
		 			cout<<i<<" ";
		 			flag=0;
				 } 
		 		
			  } 
			  if(flag) 
			  cout<<"Not Found."; 
			  cout<<endl;
		}
	return 0;
}

 

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