gpt4 book ai didi

阿特金筛法的 Python 实现

转载 作者:太空宇宙 更新时间:2023-11-03 17:57:57 25 4
gpt4 key购买 nike

我的代码可以给出大多数素数,但它仍然包含 1 并遗漏了一些数字:23 和 47(计算 100 以下的素数时)。由于某种原因它包括 91,有什么想法吗?我一直在使用维基百科的说明 Sieve of Atkin.

我的代码如下:

limit = 100
results = [2, 3, 5] #prime numbers
sieve = [i for i in range(limit + 1)] #numbers to test
TF = [False] * (limit + 1) #marks number as prime or not
ModFour = [1, 13, 17, 29, 37, 41, 49, 53]
ModSix = [7, 19, 31, 43]
ModTwelve = [11, 23, 47, 59]

for x in range(limit + 1):
for y in range(limit + 1):
test = 4 * x**2 + y**2
if test % 60 in ModFour:
try:
TF[test] = True
except IndexError:
pass
test = 3 * x**2 + y**2
if test % 60 in ModSix:
try:
TF[test] = True
except IndexError:
pass
if x > y:
test = 3 * x**2 - y**2
if test % 60 in ModTwelve:
try:
TF[test] = True
except IndexError:
pass

for n in range(2, limit + 1):
if TF[n] == True:
for x in range((n**2), (limit + 1), (n**2)):
TF[x] = False


for p in range(limit + 1):
if TF[p] == True:
results.append(sieve[p])


for prime in results:
print prime

欢迎任何有关筛子优化的建议。谢谢

最佳答案

您没有翻转TF[test] - 您只是将这些元素设置为True。与 (this SO question) 处的代码进行比较:

test = 4 * x**2 + y**2    | n = 4*x**2 + y**2
if test % 60 in ModFour: | if n<=limit and (n%12==1 or n%12==5):
try: |
TF[test] = True | is_prime[n] = not is_prime[n]
except IndexError: |
pass |

要从结果中删除1,只需在构建结果列表时从TF[5]开始:

for p in range(5, limit + 1):
if TF[p] == True:
results.append(sieve[p])

关于阿特金筛法的 Python 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28221274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com