1 条题解
-
0
思路与算法
三位回文数必为101a+10b,其中a=1至9、b=0至9。枚举这90个数,调用试除素数函数,只输出素数。
正确性说明
三位回文的百位和个位相同、百位非0,故构造完整且唯一。素数判定排除全部合数,最终得到既是三位回文又是素数的所有数,枚举顺序自动递增。独立答案逐个扫描100至999,以文本逆序判断回文再检查素性。
复杂度
固定90个候选、每个至多√999次试除,时间O(1)、空间O(1),无数组初始化。
易错点
先构造回文再判断素性,不能把所有三位回文都输出。末尾5或偶数通常不为素数,通用试除已经处理。输出列表而非数量;当前库P0281是输入上界后输出数量,协议不同。
参考代码(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 a = 1; a < 10; ++a) for (int b = 0; b < 10; ++b) { int n = 101 * a + 10 * b; if (prime(n)) cout << n << "\n"; } }
- 1