目錄
- 輸出100以內的所有素數
- 方法1:基礎判斷法
- 方法2:埃拉托斯特尼篩法(效率更高)
- 方法3:優化版篩法(只考慮奇數)
- 方法4:使用STL算法
- 方法5:遞歸實現
- 總結:
輸出100以內的所有素數
方法1:基礎判斷法
#include <iostream>
using namespace std;bool isPrime(int n) {if (n <= 1) return false;for (int i = 2; i * i <= n; i++) {if (n % i == 0) return false;}return true;
}int main() {for (int i = 2; i <= 100; i++) {if (isPrime(i)) {cout << i << " ";}}return 0;
}
方法2:埃拉托斯特尼篩法(效率更高)
#include <iostream>
#include <vector>
using namespace std;void sieveOfEratosthenes(int n) {vector<bool> prime(n + 1, true);prime[0] = prime[1] = false;for (int p = 2; p * p <= n; p++) {if (prime[p]) {for (int i = p * p; i <= n; i += p) {prime[i] = false;}}}for (int p = 2; p <= n; p++) {if (prime[p]) {cout << p << " ";}}
}int main() {sieveOfEratosthenes(100);return 0;
}
方法3:優化版篩法(只考慮奇數)
#include <iostream>
#include <vector>
using namespace std;void optimizedSieve(int n) {if (n >= 2) cout << "2 ";int size = (n - 1) / 2;vector<bool> prime(size, true);for (int i = 0; i < size; i++) {if (prime[i]) {int p = 2 * i + 3;cout << p << " ";for (int j = p * p; j <= n; j += 2 * p) {prime[(j - 3) / 2] = false;}}}
}int main() {optimizedSieve(100);return 0;
}
方法4:使用STL算法
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;bool isPrime(int n) {if (n <= 1) return false;for (int i = 2; i * i <= n; i++) {if (n % i == 0) return false;}return true;
}int main() {vector<int> numbers(99);iota(numbers.begin(), numbers.end(), 2);numbers.erase(remove_if(numbers.begin(), numbers.end(), [](int n) { return !isPrime(n); }),numbers.end());for (int n : numbers) {cout << n << " ";}return 0;
}
方法5:遞歸實現
#include <iostream>
using namespace std;bool isPrime(int n, int i = 2) {if (n <= 2) return (n == 2);if (n % i == 0) return false;if (i * i > n) return true;return isPrime(n, i + 1);
}int main() {for (int i = 2; i <= 100; i++) {if (isPrime(i)) {cout << i << " ";}}return 0;
}
總結:
- 基礎判斷法簡單直觀,適合小范圍素數判斷
- 篩法在大數據量時效率更高
- STL版本展示了C++標準庫的使用
- 遞歸版本展示了另一種思維方式
輸出結果都是100以內的素數:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97