[英]Finding all circular primes below a given number in python
我正在嘗試編寫一段代碼,它將打印出低於給定數字的所有圓形素數,但由於某種原因,我的代碼打印的數字遠遠超出了我的限制。 您是否看到可以修復它的任何可能方法?
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 next_largest(n):
k = len(str(n))
return 10**k
def circular_primes(upper):
circular = []
primes = list(gen_primes(next_largest(upper)))
for prime in primes:
string = str(prime)
digits = deque(string)
for rotation in range(1, upper):
digits.rotate(1)
if int("".join(digits)) not in primes:
break
else:
circular.append(prime)
return circular
print(circular_primes(200))
output
[2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, 97, 113, 131, 197, 199, 311, 337, 373, 719, 733, 919,
971, 991]
你可以只替換素數變量初始化
primes = list(gen_primes(upper))
next_largest function 將 200 的值 1000 作為 10**3 返回。
def next_largest(n):
k = len(str(n))
return 10**k
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.