筛选法求100以内的素数c++
时间: 2023-12-06 08:35:50 浏览: 118
以下是使用筛选法求100以内素数的C++代码:
```c++
#include <iostream>
using namespace std;
int main() {
int arr[101] = {0}; // 容量为101的数组并将其全部赋值为0
for (int i = 2; i < 101; i++) {
if (arr[i] == 0) { // 如果当前数是素数
for (int j = i * 2; j < 101; j += i) {
arr[j] = 1; // 将其倍数全部标记为非素数
}
}
}
for (int i = 2; i < 101; i++) {
if (arr[i] == 0) { // 输出所有素数
cout << i << "是素数" << endl;
}
}
return 0;
}
```
相关问题
c++筛选法求n以内素数
在 C++ 中,筛选法(Sieve of Eratosthenes)是一种常见的求解 n 以内素数的经典算法。这种算法基于筛除法的思想,主要用于寻找小于等于给定数值的所有质数。以下是基本的步骤:
1. 创建一个布尔数组,大小为 n+1,初始所有元素都标记为 true,表示它们都是潜在的质数。
2. 从 2 开始(最小的质数),遍历这个数组,将每个素数的倍数都标记为 false,因为它们不是质数。例如,2 的倍数就是 4, 6, 8, ... 等,3 的倍数是 6, 9, 12, ... 等。
3. 遍历结束后,数组中仍然为 true 的位置对应的数字就是素数。
下面是一个简单的 C++ 实现示例:
```cpp
#include <iostream>
#include <vector>
std::vector<int> sieveOfEratosthenes(int n) {
std::vector<bool> isPrime(n + 1, true); // 假设所有数都是质数
isPrime[0] = isPrime[1] = false; // 0 和 1 不是质数
for (int i = 2; i * i <= n; ++i) { // 只需检查到√n
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i)
isPrime[j] = false;
}
}
// 收集所有的质数
std::vector<int> primes;
for (int i = 2; i <= n; ++i)
if (isPrime[i])
primes.push_back(i);
return primes;
}
int main() {
int n;
std::cout << "Enter a number: ";
std::cin >> n;
std::vector<int> primeNumbers = sieveOfEratosthenes(n);
std::cout << "Primes less than or equal to " << n << ": ";
for (const auto& prime : primeNumbers)
std::cout << prime << " ";
std::cout << "\n";
return 0;
}
```
C++用筛选法求100以内的素数
可以使用筛选法(埃氏筛法)求100以内的素数,具体步骤如下:
1. 创建一个bool类型的数组,用于标记每个数字是否为素数。数组大小为101(0-100)。
2. 将数组中所有元素初始化为true。
3. 从2开始,将2的倍数(除2以外)标记为false。
4. 从3开始,将3的倍数(除3以外)标记为false。
5. 一直循环到sqrt(100),将每个素数的倍数(除自己以外)标记为false。
6. 输出所有标记为true的数字,即为100以内的素数。
下面是C++代码实现:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
int main() {
bool isPrime[101];
for (int i = 0; i <= 100; i++) {
isPrime[i] = true;
}
for (int i = 2; i * i <= 100; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= 100; j += i) {
isPrime[j] = false;
}
}
}
cout << "Prime numbers from 0 to 100: ";
for (int i = 2; i <= 100; i++) {
if (isPrime[i]) {
cout << i << " ";
}
}
return 0;
}
```
输出结果为: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 。
阅读全文