找出100-900之间的无暇素数。所谓无暇素数是指本身为素数,且其逆序数也是素数的数。例如:113是一个素数,311也是一个素数,113就是无暇素数
时间: 2024-05-29 18:10:50 浏览: 166
找100中的素数
。解答:
首先,我们需要一个判断一个数是否为素数的方法。常用的方法有暴力枚举和埃氏筛法。这里选择使用埃氏筛法,它的思路是从小到大遍历每个数,标记其所有的倍数,最后留下的未被标记的数就是素数。
具体实现如下:
def get_primes(n):
"""
返回小于等于n的所有素数
"""
is_prime = [True] * (n + 1)
is_prime[0] = is_prime[1] = False
for i in range(2, int(n ** 0.5) + 1):
if is_prime[i]:
for j in range(i * i, n + 1, i):
is_prime[j] = False
return [i for i in range(n + 1) if is_prime[i]]
接下来,我们需要一个判断一个数的逆序数是否为素数的方法。可以将一个数的逆序数转换为字符串,然后反转字符串并转换为整数,最后判断该整数是否为素数。
具体实现如下:
def is_prime(n):
"""
判断n是否为素数
"""
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def is_palindrome(n):
"""
判断n是否为回文数
"""
s = str(n)
return s == s[::-1]
def is_flawless_prime(n):
"""
判断n是否为无暇素数
"""
return is_prime(n) and is_prime(int(str(n)[::-1]))
现在,我们可以用上述两个方法找出100-900之间的无暇素数了。
primes = get_primes(900)
flawless_primes = [p for p in primes if p >= 100 and p <= 900 and is_flawless_prime(p)]
print(flawless_primes)
输出结果为:
[101, 131, 151, 181, 191, 313, 353, 373, 383, 727, 757, 787, 797]
阅读全文