用篩選法求100之內的素數
阿新 • • 發佈:2020-07-27
用篩選法求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; }
【執行結果】