一个数如果从左往右读和从右往左读数字是完全相同的,则称这个数为回文数,比如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)
测试结果: