我需要编写一个代码,生成任何给定数字下的所有循环素数。我的代码中有一些缺陷,它没有提供所有的循环素数,只是其中的一些。它只会显示所有的循环素数,如果它们都低于我给定的数字。 例如,如果上限=200,它将不显示循环素数197。其他旋转为971和719。然而,如果上限=1000,它将显示所有3个循环素数。 我不知道这是一个逻辑或代码错误,但任何和所有的帮助是感激的
from collections import deque
def gen_primes(upper):
D = {}
q = 2
while q <= upper:
if q not in D:
yield q
D[q * q] = [q]
else:
for p in D[q]:
D.setdefault(p + q, []).append(p)
del D[q]
q += 1
def circular_primes(upper):
circular = []
primes = list(gen_primes(upper-1))
for prime in primes:
string = str(prime)
digits = deque(string)
for rotation in range(1, len(string)):
digits.rotate(1)
if int("".join(digits)) not in primes:
break
else:
circular.append(prime)
return circular
print(circular_primes(150))
代码修复
你没有创建覆盖所有可能旋转的素数
添加计算大于n的最小数及其所有旋转的函数
重构代码
测试
输出
相关问题 更多 >
编程相关推荐