请写一个c++程序写出从2到n的所有素数以及半素数
时间: 2024-10-02 12:02:29 浏览: 35
C++ 实现求小于n的最大素数的实例
5星 · 资源好评率100%
首先,我们需要了解什么是素数(Prime Number)和半素数(Sophie Germain Prime)。素数是指只有两个正因数(1和自身)的自然数,而半素数是指除了1以外,其两倍再加上1也是素数的数。
下面是一个简单的C++程序,用于找出从2到n的所有素数,并打印出其中的半素数:
```cpp
#include <iostream>
#include <vector>
bool is_prime(int num) {
if (num <= 1)
return false;
for (int i = 2; i * i <= num; ++i) {
if (num % i == 0)
return false;
}
return true;
}
bool is_sophie_german_prime(int num) {
if (!is_prime(num))
return false;
int double_num = 2 * num + 1;
return is_prime(double_num);
}
void print_primes_and_half_primes(int n) {
std::vector<int> primes;
for (int i = 2; i <= n; ++i) {
if (is_prime(i)) {
primes.push_back(i);
if (is_sophie_german_prime(i))
std::cout << "Sophie Germain prime: " << i << "\n";
}
}
std::cout << "Primes from 2 to " << n << " are:\n";
for (const auto& prime : primes)
std::cout << prime << " ";
std::cout << "\n";
}
int main() {
int n = 50; // 可以修改为需要查找的范围上限
print_primes_and_half_primes(n);
return 0;
}
```
在这个程序中,`is_prime`函数检查一个数字是否是素数,`is_sophie_german_prime`函数检查一个数字是否是半素数。`print_primes_and_half_primes`函数会找出并打印给定范围内的所有素数及其对应的半素数。
阅读全文