洛谷:P1217:回文质数


洛谷:P1217:回文质数

Table of Contents

题目

P1217:回文质数

分析

这道题合理的解法是,先构造相应的回文数字,然后判定是否是素数。

结论:除了11,所有偶数位数的回文数都不可能是素数。证明见“思考”部分。

如何构造奇数位数的回文数呢?一个典型的循环如下:

for (int d1 = 1; d1 <= 9; d1 += 2)
{
    for (int d2 = 0; d2 <= 9; ++d2)
    {
        int val = d1 * 100 + d2 * 10 + d1;
        if (val <= b && val >= a)
            out.push_back(val);
    }
}

具体用多少个循环,要根据题目给出的范围而定。

确定了回文数后,在进行常规的素数判定会更快,因为总体需要判定的数字少了许多。

答案

Solution

思考

对于上文的结论:如果一个回文数是2/4/6/8……等偶数位的,那么一定不会是素数(除了11)。如何严格证明?

首先,一个数如果能被11整除,那么它的奇数位数字的和与偶数位数字的和的差,一定是可以整除11的。

观察一下一个偶数位数的回文数的组成,一定是形如:\(a_1a_2a_3...a_ka_k...a_3a_2a_1\)。两个对应的数字的位置,形成了第i位和2k-i-1位的关系。而这个关系中的两个位置,一定是一个在奇数位,一个在偶数位。所以,这个数的偶数位数字加起来,一定等于奇数位数字加起来。其差为0,也就一定是11的倍数。

Previous Next