1 条题解

  • 0
    @ 2026-10-26 13:21:31

    思路与算法

    三位回文数必为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

    信息

    ID
    1752
    时间
    1000ms
    内存
    64MiB
    难度
    进阶
    标签
    递交数
    1
    已通过
    1
    上传者