描述
    回文素数是指一个数既是素数又是回文数。例如,131,既是素数又是回文数。用户输入一个正整数 n , 请你在一行内输出从小到大排列的的前n个回文素数,数字后面用一个空格进行分隔。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    输入格式
    输入一个正整数‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    输出格式
    符合要求的回文素数‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    输入输出示例
    输入:10
    输出:2 3 5 7 11 101 131 151 181 191
    解析:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    这里有两个问题,一个是判定素数,一个是判定回文数,前者可以参考“判断素数函数”学习。判定一个数字是回文数字方法非常简单,将其转为字符串后,可以利用字符串的通用操作,对其进行逆向切片获得其逆序字符串,如果逆序的字符串与原字符串相同的话,刚其是回文数字。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬这里需要注意,因判定回文的计算量非常小,远小于素数的判定,所以编程程序时,先判定是否是回文,当其不是回文时,由于短路作用,程序不会再去判定其是否为素数,可以节约较多的运行时间。对于此类不确定循环次数的问题,一般不建议使用很大的数做range()参数的方法,如:

    1. for i in range(100000000):
    2. ....

    由于不确定循环多少次,如果需要输出的回文素数个数较多,可能会出现在循环次数内找不到足够多的解的情况。而用while循环,可以无限的循环下去,直到计数达到要求的数量为止,用break终止循环。

    1. def is_prime(n):
    2. """判断素数,接受一个正整数n为参数,判断n是否为素数,返回布尔值"""
    3. if n < 2: # 0 和 1 以及负数都不是素数
    4. return False # False代表不是素数,返回调用函数之处
    5. for i in range(2,int(n ** 0.5) + 1): # 两因子相同时,为保证取到右边界,需加1
    6. if n % i == 0: # 从 2到n-1中如果存在一个数是i,使n 可以整除i,则n不是素数
    7. return False
    8. else: # 若for循环未遇到return正常结束,则n是素数
    9. return True
    10. n = int(input()) # 输入要寻找回文素数的个数n
    11. i = 2 # 素数从2 开始,小于2的都不是素数
    12. count = 0 # 设置计数器,用于计数
    13. while count < n: # 构建循环,当计数小于n时进入循环
    14. # 当i是回文字符串,且 i 是素数时
    15. if str(i) == str(i)[::-1] and is_prime(i):
    16. # 先判定是否是回文,不是回文就不需要断定是不是素数,可以减少计算量,提高效率
    17. print(i,end = ' ') # 输出回文素数,后面跟一个空格
    18. count = count + 1 # 每找到一个回文素数,计数增加1
    19. i = i+ 1 # 继续判断下一个数

    若有文件prime.py的内容如下:

    1. import math
    2. def is_prime(n):
    3. """判断素数,接受一个正整数n为参数,判断n是否为素数,返回布尔值"""
    4. if n < 2: # 0 和 1 以及负数都不是素数
    5. return False # False代表不是素数,返回调用函数之处
    6. for i in range(2,int(n ** 0.5) + 1): # 两因子相同时,为保证取到右边界,需加1
    7. # for i in range(2,int(math.sqrt(n)) + 1)
    8. if n % i == 0: # 从 2到n-1中如果存在一个数是i,使n 可以整除i,则n不是素数
    9. return False
    10. else: # 若for循环未遇到return正常结束,则n是素数
    11. return True
    12. if __name__ == "__main__":
    13. m = int(input())
    14. .... 省略

    可以修改本题的代码,通过引入自定义模块完成本题:

    1. import prime
    2. n = int(input()) # 输入要寻找回文素数的个数n
    3. i = 2 # 素数从2 开始,小于2的都不是素数
    4. count = 0 # 设置计数器,用于计数
    5. while count < n: # 构建循环,当计数小于n时进入循环
    6. # 当i是回文字符串,且 i 是素数时
    7. if str(i) == str(i)[::-1] and prime.is_prime(i):
    8. # 先判定是否是回文,不是回文就不需要断定是不是素数,可以减少计算量,提高效率
    9. print(i,end = ' ') # 输出回文素数,后面跟一个空格
    10. count = count + 1 # 每找到一个回文素数,计数增加1
    11. i = i+ 1 # 继续判断下一个数

    其他类似使用到素数判定的题目都可以使用这样的方法,通过定义模块和导入模块,实现代码的复用。