输出一个正数n求在n范围之内的所有质数c++
时间: 2024-10-21 19:03:34 浏览: 19
在C++中,你可以使用Sieve of Eratosthenes算法来找出指定范围内所有的质数。这是一个常见的计算质数的有效方法。以下是基本的代码示例:
```cpp
#include <iostream>
#include <vector>
std::vector<int> sieveOfEratosthenes(int n) {
std::vector<bool> isPrime(n + 1, true);
isPrime[0] = isPrime[1] = false;
for (int i = 2; i * i <= n; ++i) {
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 << "请输入一个正整数: ";
std::cin >> n;
std::vector<int> primeNumbers = sieveOfEratosthenes(n);
if (!primeNumbers.empty()) {
std::cout << "在范围 " << n << " 内的所有质数有: ";
for (const auto &prime : primeNumbers)
std::cout << prime << " ";
} else {
std::cout << "在范围 " << n << " 内没有质数。\n";
}
return 0;
}
```
这个程序首先创建一个布尔数组`isPrime[]`,初始化为true,然后标记除了0和1之外的所有非质数。接着,它遍历数组并删除每个找到的质数的倍数。最后,将剩下的元素添加到质数列表`primes`中。
阅读全文