C++编程找出1到100之间的所有孪生素数
在 C++ 中,找出 1 到 100 之间的所有孪生素数(即差值为 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 的所有数字,找出所有的孪生素数对。两个素数 p
和 q
是孪生素数,当且仅当 q = p + 2
且 p
和 q
都是素数。
cppint 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;
}
说明
isPrime()
函数:检查一个数是否为素数。对 2 进行特殊处理,排除所有偶数。对于大于 2 的数,检查是否能被 3 到平方根范围内的奇数整除。- 主函数:遍历从 2 到 98 的所有数字(因为要检查
i + 2
),找出所有孪生素数对,并打印出来。
总结
- 检查素数:定义一个函数来检查是否为素数。
- 遍历数字:从 2 到 98 遍历,找出所有孪生素数对。
- 输出结果:打印所有符合条件的孪生素数对。
这样,你就可以找到 1 到 100 之间的所有孪生素数对。