打印出 python 中的素数列表

Print out a list of prime numbers in python

问题是:打印出1到1000之间满足两个条件的所有数字:

  1. 那些是质数
  2. 反转后的数也是质数。 例如,13 满足(因为 13 和 31 是质数),但 19 不满足(19 是质数,而 91 不是)。 我的代码:
def prime(n):
  if n<2:
    return False
  for i in range(1, n):
    if n%i == 0:
      return False
  else:
    return True

def reverse(n):
  List = []
  while n>0:
    List.append(n%10)
    n = n//10

  string = [str(integer) for integer in List]
  a_string = "".join(string)
  result = int(a_string)
  print(result)

L = []
for i in range (1, 1000):
  if prime(i) == prime(reverse(i)) == True:
    L.append(i)
print(L)

我的似乎包含一些错误,因为结果不符合预期,要么显示 none 要么仍然在列表中显示 19。 提前致谢!

看来运行prime两次效率很低。我会推荐以下内容:

def prime(n):
  if n<2:
    return False
  for i in range(2, n):
    if n%i == 0:
      return False
  return True

l = [i for i in range(1, 1001) if prime(i)]
print(*(x for x in l if int(str(x)[::-1]) in l))

首先你的 prime 方法是错误的,因为循环从 1 开始,并且每个数字都满足 n%1 == 0 ,它需要从 2

开始
def prime(n):
    if n < 2:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
    return True

然后你的 reverse 方法 returns 什么都没有 所以 reverse(5) 给出 None,你已经手动尝试了。

def reverse(n):
    values = []
    while n > 0:
        values.append(n % 10)
        n = n // 10
    return int("".join(map(str, values)))

则条件简化为

for i in range(1, 20):
    if prime(i) and prime(reverse(i)):
        L.append(i)

反向过程也可以用字符串来完成,而且很短,可以内联

L = []
for i in range(1, 20):
    if prime(i) and prime(int(str(i)[::-1])):
        L.append(i)