python - 在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))
输出
[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 函数将 200 的值 1000 作为 10**3 返回。
def next_largest(n):
k = len(str(n))
return 10**k
推荐阅读
- android - Kotlin Parcelize 中的意外行为
- php - 制作一个允许除@符号之外的所有电子邮件字符的正则表达式
- php - PHP获得下个月的继续日期并每月获得价格贷款,第一个月支付利息
- javascript - 显示文本颜色基于 json 颜色代码 0xAF001D
- javascript - Vue js在单击按钮时动态添加文本框时绑定动态ID
- spring - spring boot servlet上下文与应用程序上下文
- amazon-s3 - 我一直在尝试使用 logrotate 实用程序并将压缩日志移动到 s3,但是,它仅在强制完成时才会旋转
- powershell - 使用 powershell 将用户添加到 Exchange In-placeHold/eDiscovery (In-Situ)
- java - 从 0 数到 100
- php - 使用 Laravel 5.8 获取所有本地化字符串