用c++编写一个代码:找出1000~2000间的全部素数。 分析: 如何判断一个数m 是否次素数? 令k=vi,如果m 不能被2~k之中任何一个整数整除,则m 是素数,否则不是素数
时间: 2024-11-05 09:27:13 浏览: 21
首先,我们需要理解如何判断一个数是否是素数。对于一个大于1的自然数m,若其只能被1和自身整除,那么它就是素数。我们可以编写一个C++程序来实现这个功能,这里我们会采用埃拉托斯特尼筛法(Sieve of Eratosthenes)来找到指定范围内的所有素数。
```cpp
#include <iostream>
#include <vector>
bool is_prime(int m) {
if (m <= 1)
return false;
if (m == 2 || m == 3)
return true;
if (m % 2 == 0 || m % 3 == 0)
return false;
int sqrt_m = std::sqrt(m);
for (int i = 5; i <= sqrt_m; i += 6) {
if (m % i == 0 || m % (i + 2) == 0)
return false;
}
return true;
}
void find_primes_in_range(int start, int end) {
std::vector<bool> is_composite(end + 1, false); // 假设所有数字都是非合数
for (int i = 2; i * i <= end; i++) { // 遍历到√end
if (!is_composite[i]) {
for (int j = i * i; j <= end; j += i) {
is_composite[j] = true; // 标记i的倍数为合数
}
}
}
std::cout << "Prime numbers between " << start << " and " << end << " are:\n";
for (int i = start; i <= end; ++i) {
if (!is_composite[i])
std::cout << i << " ";
}
std::cout << "\n";
}
int main() {
const int range_start = 1000;
const int range_end = 2000;
find_primes_in_range(range_start, range_end);
return 0;
}
```
在这个代码中,我们首先创建了一个布尔向量`is_composite`,初始化为所有数字都是非合数(即可能是素数)。然后遍历从2到√end,标记出每个素数的倍数。最后,我们只打印出那些在给定范围内且未被标记为合数的数。
阅读全文