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;
}