輸入正整數n(n大於等於2),求不大於n的全部質數(素數)【其中一種優化算法:篩選數組法】

1, 質數(素數)概念:質數(prime number)又稱素數,有無限個。一個大於1的自然數,除了1和它本身外,不能被其他自然數整除。例如:3 只能被1和3整除,5,7,9 這些都是。4,6這些都不是質數(注意2是質數)。

2 基本思想:利用數組存儲所有數值,篩選出全體質數
(1)輸入n,創建數組p,數組的內容從0開始依次增1
(2)循環遍歷數組p,從下標(記爲i)爲2的開始
(2.1)如果當前的 p[i] 不是質數,continue 篩選下一個
(2.2)檢查數組p中從下標i之後的元素是否爲素數。
(2.2.1)如果當前的元素不是質數,continue篩選下一個
(2.2.2)否則,就判斷,如果不是質數,就把數組的值標記爲-1
(3)從下標2開始,打印出數值不爲-1的元素,即爲全體質數

3代碼

#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
	int* p;
	int n;
	cin >> n;
	p = new int[n];
	for (int j = 0; j < n; j++) {
		p[j] = j;
	}
	for (int i = 2; i < n ; i++){ //循環遍歷數組,從數字2開始
		if (p[i] == -1) continue;// 已經標記爲非素數的就跳過
		for (int j = i + 1; j < n; j++) {// 循環檢查數字i後面的數字是否是質數
			if (p[j] == -1) continue;//已經標記爲非素數的就跳過
			if (p[j] % i== 0)
				p[j] = -1;// 非素數標記爲-1
		}
	}
	for (int i = 2; i < n; i++) {
		if (p[i] != -1)
			cout << p[i] << endl;
	}
	
	return 0;
}

效果:輸入100
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章