写一个程序来找出范围 [a,b] $(5 \le a < b \le 100,000,000)$ (一亿)间的所有回文质数。
输入格式
第 1 行: 二个整数 a 和 b .
输出格式
输出一个回文质数的列表,一行一个。
输入输出样例
输入
1
5500
输出
1 2 3 4 5 6 7 8 9 10 11 12
5 7 11 101 131 151 181 191 313 353 373 383
超时实现
1 2 3 4 5 6 7 8 9 10 11 12
# 获得输入 ab = input().split() a = int(ab[0]) b = int(ab[1]) for i inrange(a, b + 1): if i % 2 == 1: ifstr(i)[::-1] == str(i): # 判断是否回文数 for j inrange(2, int(i ** 0.5) + 1): # 判断是否质数 if i % j == 0: break else: print(i) # 是则打印
大佬方法
埃氏筛
1 2 3 4 5 6 7 8 9 10
defprime_numbers(n): number = [1]*(n+1) # 初始化,1表示全部为质数 for i inrange(2, int((n**0.5))+1): if number[i]: # 如果下标i对应的数字i是素数 for j inrange(i*i, n+1, i): # 素数i的各个倍数 number[j] = 0 j += 1 for x inrange(2, n+1): if number[x]: print(x)