【C++练习】06.输出100以内的所有素数
目录
- 输出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