1. 用篩選法求100之內的素數
【答案解析】
素數:約數為1和該數本身的數字稱為素數,即質數
篩選法:又稱為篩法。先把N個自然數按次序排列起來。1不是質數,也不是合數,要划去。第二個數2是質數留下來,而把2后面所有能被2整除的數都划去。2后面第一個沒划去的數是3,把3留下,再把3后面所有能被3整除的數都划去。3后面第一個沒划去的數是5,把5留下,再把5后面所有能被5整除的數都划去。這樣一直做下去,就會把不超過N的全部合數都篩掉,留下的就是不超過N的全部質數。因為希臘人是把數寫在塗臘的板上,每要划去一個數,就在上面記以小點,尋求質數的工作完畢后,這許多小點就像一個篩子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼篩”,簡稱“篩法”。(另一種解釋是當時的數寫在紙草上,每要划去一個數,就把這個數挖去,尋求質數的工作完畢后,這許多小洞就像一個篩子。)
【代碼實現】
//用篩選法求100以內的素數
#include<stdio.h>
int main()
{
int i, j, k = 0;
// 將數組匯總每個元素設置為:1~100
int a[100];
for (i = 0; i < 100; i++)
a[i] = i+1;
// 因為1不是素數,把a[0]用0標記
// 最后一個位置數字是100,100不是素數,因此循環可以少循環一次
a[0] = 0;
for (i = 0; i < 99; i++)
{
// 用a[i]位置的數字去模i位置之后的所有數據
// 如果能夠整除則一定不是素數,該位置數據用0填充
for (j = i + 1; j < 100; j++)
{
if (a[i] != 0 && a[j] != 0)
{
//把不是素數的都賦值為0
if (a[j] % a[i] == 0)
a[j] = 0;
}
}
}
printf(" 篩選法求出100以內的素數為:\n");
for (i = 0; i < 100; i++)
{
//數組中不為0的數即為素數
if (a[i] != 0)
printf("%3d", a[i]);
}
printf("\n");
return 0;
}
【運行結果】