酷代码 AI
菜单

如果n和n+2都是素数,则称它们是孪生素数。输入m,输出两个数均不超过m的最大孪生素数。 例如 m = 20 m=20时答案是 17 、 19 17、19, m = 1000 m=1000时答案是 881 、 883 881、883。 输入 输入在一行中给出 M M, M M是一个不超过 1000000 1000000的正整数。 输出 不超过 m m的最大孪生素数,小数在前,大数在后,中间用一个空格分隔。c++

```cpp #include <iostream> #include <vector> #include <cmath> using namespace std; // 判断素数函数 bool isPrime(int n) { if (n <= 1) return false; if (n == 2) return true; if (n % 2 == 0) return false; int limit = sqrt(n); for (int i = 3; i <= limit; i += 2) { if (n % i == 0) return false; } return true; } int main() { int m; cin >> m; // 从大到小查找孪生素数 for (int i = m; i >= 5; i--) { if (isPrime(i) && isPrime(i - 2)) { cout << i - 2 << " " << i << endl; return 0; } } // 如果没有找到孪生素数 cout << "None" << endl; return 0; } ``` 代码说明: 1. `isPrime`函数采用优化方法判断素数:排除偶数,只检查到平方根。 2. 从`m`开始向下遍历,找到第一对满足条件的孪生素数立即输出并结束程序。 3. 遍历从5开始,因为(3,5)是最小的孪生素数对。 4. 如果找不到孪生素数,输出"None"(根据题目要求,实际测试数据保证存在解)。 时间复杂度: O(n√n),对于m≤10^6可以接受。 [2026-01-03 14:30:05 | AI问答 | 342点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多