1. 程式人生 > >【篩選法】求素數

【篩選法】求素數

1010: 素數求解(20分)

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

題目描述

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

輸入

多行資料,每一行兩個正整數

輸出

範圍內的素數

樣例輸入

2 9
20 10
14 15

樣例輸出

2 3 5 7
11 13 17 19​

Not Found.

c:可以使用篩選法解素數

#include<stdio.h>
bool f[100000];

int main()
{
int m, n;
while (scanf("%d %d", &m, &n) != EOF)


{
int flag = 0, max = 0, min = 0;
if (m >= n)
{
max = m; min = n;
}
else
{
max = n; min = m;
}
f[0] = false; f[1] = false;//預處理,這兩個不能放入遍歷
for (int i = 2; i <= max; i++) //注意關於輸入相同的整數1處如 2,2 7,7
f[i] = true;//先預設所有數為素數
for (int i = 2; i < max; i++)//注意關於輸入相同的整數2處
{
if (f[i] == true)
{
for (int j = 2; j*i <=max; j++)/
/無論min為多少j皆由2開始,因為目的是遍歷找出非素數
f[i*j] = false;// 滿足此條件的必定不是素數,標記為false
}

}

for (int i = min; i <= max; i++)//遍歷一次true則有素數
{

if (f[i])
{
printf("%d ", i); flag = 1;
}

}
if (flag == 0)
{
printf("Not Found.");
}
printf("\n");
}

return 0;
}