1 条题解
-
0
思路与算法
定义素数判断函数:小于2不是素数,否则试除2至平方根。枚举10至99,用十位、个位交换得到逆序数;原数与逆序数都为素数时输出。
正确性说明
不超过平方根的非平凡因数存在当且仅当该数为合数,因此试除判定准确。枚举了全部两位自然数,交换十位个位正是题述换位,两个素性条件共同成立才接受,输出集合与题意完全相同。
复杂度
固定90个数,每个至多试除9个因数,时间O(1)、额外空间O(1),函数局部变量初始化O(1)。若扩展为上界B则朴素上界O(B√B)。
易错点
1不为素数。回文素数如11也符合换位后仍素数,不要排除。固定两位全集无输入,1点输出全部合法数,按从小到大各一行。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; bool prime(int n) { if (n < 2) return false; for (int d = 2; d * d <= n; ++d) if (n % d == 0) return false; return true; } int main() { for (int n = 10; n < 100; ++n) if (prime(n) && prime(n % 10 * 10 + n / 10)) cout << n << "\n"; }
- 1