用篩選法求100之內的素數


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

運行結果

用篩選法求100之內的素數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM