c++求孪生素数对的算法
时间: 2024-12-06 19:22:26 浏览: 26
孪生素数及哥德巴赫猜想的计算验证程序(含源码及有限计算数据)
在C++中,寻找孪生素数对(Twin Primes)是指两个相差为2的素数对,例如 (3, 5), (5, 7), (11, 13) 等。由于素数判定本身就是计算机科学中的经典问题,通常我们会使用埃拉托斯特尼筛法(Sieve of Eratosthenes)先生成一定范围内的所有素数,然后查找它们之间的差是否为2。
以下是一个简单的算法实现:
```cpp
#include <vector>
#include <iostream>
// 判断一个数是否为素数
bool isPrime(int num) {
if (num <= 1) return false;
for (int i = 2; i * i <= num; ++i)
if (num % i == 0)
return false;
return true;
}
// 寻找孪生素数
std::pair<int, int> findTwinPrimes(int start, int end) {
std::vector<bool> primes(end + 1, true); // 埃拉托斯特尼筛法
primes[0] = primes[1] = false;
for (int i = 2; i * i <= end; ++i)
if (primes[i])
for (int j = i * i; j <= end; j += i)
primes[j] = false;
for (int i = start; i < end - 2; ++i) {
if (primes[i] && primes[i + 2]) { // 检查相邻两个数
return std::make_pair(i, i + 2);
}
}
return std::make_pair(-1, -1); // 如果没有找到,返回空对
}
int main() {
int range = 100; // 可以根据需要调整搜索范围
auto result = findTwinPrimes(2, range); // 从2开始搜索
if (result.first != -1) {
std::cout << "First twin prime pair: (" << result.first << ", " << result.second << ")" << std::endl;
} else {
std::cout << "No twin primes found in the given range." << std::endl;
}
return 0;
}
```
这个程序首先用埃拉托斯特尼筛法找出范围内的所有素数,然后逐个检查每个素数与其后面第二个数是否构成孪生素数。如果找到一对,就立即返回。如果没有找到,程序会在`main()`函数结束时返回一个表示失败的结果。
阅读全文