I am a teacher!

导航

习题解析之:寻找回文素数

【问题描述】
如果一个整数是素数,同时其对应的字符串是回文字符串时,便称其为回文素数。例如,131 既是素数,其对应的字符串131又是回文字符串,所以 131 是回文素数。

输入一个正整数 n , 请你在一行内输出从小到大排列的小于这个数的所有回文素数,每个数字后面一个空格。

输入格式

输入一个正整数

输出格式
一行内输出从小到大排列的小于这个数的所有回文素数,每个数字后面一个空格。

示例

输入:
191
输出:
2 3 5 7 11 101 131 151 181

【编程思路】

        判断一个整数 n 是否为素数的方法是:

        小于 2 的整数肯定不是素数(最小的素数是 2)。
        整数 2 是素数。
        对于大于的整数 n,若 n 是偶数,则 n 不是素数。
        若 n 是奇数,用3~sqrt(n)中的每一个奇数 i 去除 n ,若某一个 i 能被 n 整除,则 n 不是素数;否则,n 是素数。
        该操作可定义为一个函数,如下: 

def is_prime(n):
    if n < 2:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    for i in range(3,int(n ** 0.5) + 1,2):
        if n % i == 0:
            return False
    return True

    要找出小于 n 的所有回文素数,用循环 for i in range(2,n): 对 2 ~ n - 1 这个范围的整数进行穷举,若某个整数 i 既是素数,其对应的字符串又是回文字符串,则输出它。

        判断一个整数 n 对应的字符串是否是回文字符串,只需要判断该整数对应的字符串 str(n) 与其逆序字符串 str(n)[::-1] 是否相等即可。即 str(n) == str(n)[::-1] 的值若为 True,则 str(n) 是回文字符串。 

        编写的源程序如下: 

image

        注意:程序中判断回文素数的条件最好写成  if str(i) == str(i)[::-1] and is_prime(i):,因为回文的判断相对简单,这样若整数 i 不是回文数的话,按 and 运算的短路特性,后面的素数判断不执行; 

                  若写成  if  is_prime(i)  and str(i) == str(i)[::-1] : ,则每个数都会执行素数判断的函数,这样程序效率相对较低。

posted on 2025-11-13 08:37  aTeacher  阅读(43)  评论(0)    收藏  举报