C++编程找出1到100之间的所有孪生素数

在 C++ 中,找出 1 到 100 之间的所有孪生素数(即差值为 2 的两个素数)需要完成以下步骤:

  1. 检查素数:定义一个函数检查一个数是否是素数。
  2. 找出孪生素数对:遍历范围内的数,找出所有的孪生素数对。

详细步骤和代码

1. 检查素数的函数

首先,定义一个函数来判断一个数是否是素数。一个数是素数,当且仅当它大于 1 并且没有其他因子(即只能被 1 和它本身整除)。

cpp
#include <iostream> #include <cmath> // 用于 std::sqrt bool isPrime(int num) { if (num <= 1) return false; // 1 不是素数 if (num == 2) return true; // 2 是素数 if (num % 2 == 0) return false; // 排除偶数 // 只需检查到平方根 for (int i = 3; i <= std::sqrt(num); i += 2) { if (num % i == 0) return false; } return true; }

2. 找出孪生素数对

接下来,使用上述素数检查函数,遍历从 1 到 100 的所有数字,找出所有的孪生素数对。两个素数 pq 是孪生素数,当且仅当 q = p + 2pq 都是素数。

cpp
int main() { // 遍历 1 到 100 之间的数 for (int i = 2; i <= 98; ++i) { // 98 是 100 - 2 if (isPrime(i) && isPrime(i + 2)) { std::cout << "(" << i << ", " << i + 2 << ")" << std::endl; } } return 0; }

完整代码示例

以下是完整的代码,将上述两个部分结合起来:

cpp
#include <iostream> #include <cmath> // 用于 std::sqrt // 检查是否为素数 bool isPrime(int num) { if (num <= 1) return false; // 1 不是素数 if (num == 2) return true; // 2 是素数 if (num % 2 == 0) return false; // 排除偶数 // 只需检查到平方根 for (int i = 3; i <= std::sqrt(num); i += 2) { if (num % i == 0) return false; } return true; } int main() { std::cout << "Twin primes between 1 and 100 are:" << std::endl; // 遍历 1 到 100 之间的数 for (int i = 2; i <= 98; ++i) { // 98 是 100 - 2 if (isPrime(i) && isPrime(i + 2)) { std::cout << "(" << i << ", " << i + 2 << ")" << std::endl; } } return 0; }

说明

  1. isPrime() 函数:检查一个数是否为素数。对 2 进行特殊处理,排除所有偶数。对于大于 2 的数,检查是否能被 3 到平方根范围内的奇数整除。
  2. 主函数:遍历从 2 到 98 的所有数字(因为要检查 i + 2),找出所有孪生素数对,并打印出来。

总结

  1. 检查素数:定义一个函数来检查是否为素数。
  2. 遍历数字:从 2 到 98 遍历,找出所有孪生素数对。
  3. 输出结果:打印所有符合条件的孪生素数对。

这样,你就可以找到 1 到 100 之间的所有孪生素数对。