蓝桥杯 p0704回文数和质数 python题解

一个数如果从左往右读和从右往左读数字是完全相同的,则称这个数为回文数,比如898,1221,15651都是回文数。编写一个程序,输入两个整数min和max,然后对于min~max之间的每一个整数(包括min和max),如果它既是一个回文数又是一个质数,那么就把它打印出来。要求,回文数和质数的判断都必要要用函数的形式来实现。
输入:
  5 100
  输出:
  5 7 11

总体来说,这题的本质就如题目所述,考察对回文数和质数概念的理解。

首先这里的求质数算法用的是埃拉托斯特尼筛选法,感兴趣的可以去查一下,在求质数上限高的时候很节省运行时间。

def prime_number(max):  # 求max以内的质数
    primes = []
    sieve = [True] * (max+1)  # 是否是质数,初始化为是
    sieve[0] = sieve[1] = False  # 0,1不是质数
    p = 2
    while p ** 2 <= max:
        if sieve[p]:
            # primes.append(p)
            for i in range(p*p, max+1, p):
                sieve[i] = False
        p += 1
    for i in range(len(sieve)):  
        if sieve[i]:
            primes.append(i)
    return primes


def palindrome_number(min, max):  # 回文数
    primes = prime_number(max)
    results = []
    new_primes = [i for i in primes if i >= min]  # 大于下限的质数全部储存在新的列表
    for i in new_primes:
        is_palindrome = True  # 是否回文,默认是
        for _ in range(1, len(str(i)) // 2 + 1):  # 循环判断每一位是否满足回文
            if str(i)[_-1] != str(i)[-_]:
                is_palindrome = False
        if is_palindrome:
            results.append(i)
    return results


min, max = map(int, input().split())
result = palindrome_number(min, max)
print(*result)

测试结果:

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值