gpt4 book ai didi

python - 使用 Python 查找第 N 个素数的枚举

转载 作者:太空宇宙 更新时间:2023-11-04 08:13:06 30 4
gpt4 key购买 nike

我决定是时候开始学习编码了。我对 HTML 和 CSS 有一些了解,但我希望能够为 iOS 开发。我知道我还有很长的路要走,但我的目标是一步一步地到达那里。

我正在 iTunes U 上学习麻省理工学院的 Python 类(class),但我被作业困住了。我理解枚举和测试每一个可能的结果以找到素数的概念,但是到目前为止我所尝试的都让我失败了。我最接近的尝试如下。

# counting confirmed primes. For loop should do remainder tests on
# all testNumbers, unless caught by the if statements that rule out
# multiples of 2,3,5,7 to speed things up. divisor increments by one
# on those numbers that do not get pulled by qualifying if statements

testNumber = 2
confirmedPrime = 0

while (confirmedPrime < 1001):
for divisor in range(1, testNumber+1):
if (testNumber/2)*2== testNumber:
testNumber += 1
elif (testNumber/3)*3 == testNumber:
testNumber += 1
elif (testNumber/5)*5 == testNumber:
testNumber += 1
elif (testNumber/7)*7 == testNumber:
testNumber += 1
elif(testNumber%divisor == 0):
testNumber += 1
confirmedPrime +=1
print testNumber

然而,这并没有返回我期待的“7919”。它返回“7507”所以某处有一些复合 Material 漏网。

我已经搜索过这个网站但没有设法解决它,所以我想我会问。

最佳答案

这里有些地方不对,所以让我们一步一步来。

您首先设置初始值,这是完全合理的。

testNumber=2
confirmedPrime = 0

然后你进入 while 循环,继续直到变量 confirmedPrime 的值达到(即等于或大于)1001。我想你的任务是找到第 1000 个素数,但这样做你实际上找到了第 1001 个,因为 while 循环一直持续到 confirmedPrime 的值为 1001。将其更改为

while(confirmedPrime < 1000):

您立即进入另一个循环,第一个问题出现了,即使它不是给您错误答案的原因。

    for divisor in range(1, testNumber+1)
if (testNumber/2)*2 == testNumber:
...

for 循环内测试 2、3、5 和 7 的乘数没有任何意义,因为您只需要这样做一次testNumber 的每个值。因此,这部分测试应该移出 for 循环。

    if (testNumber/2)*2 = testNumber: # Why not use modulo here too for consistency?
testNumber += 1
elif ...
...
else:
for divisor in range(...):

下一部分是测试其他更大的除数。您正在测试 1 到 testNumber+1 范围内的除数。我不确定你为什么要这样做,但这不是一个好主意,因为当你进行倒数第二个迭代时,你的模测试将始终返回零,测试 testNumber%testNumber。所以你应该把它改成testNumber-1,事实上当你达到testNumber的平方根时你就可以停止了,但我会留给你自己想办法为什么。

现在最大的问题来了:for 循环结束后,您将 confirmedPrimes 递增 1,而无需实际检查是否找到素数。因此,递增 confirmedPrimes 应该只在第一个测试都不为真时发生,并且没有一个“除数测试”结果为真。

使用下划线而不是混合大小写(这是糟糕的 python mojo)、一致的间距等重写:

import math

test_number = 7 # Already know up to 7
confirmed_primes = 4 # Already know about 2, 3, 5 and 7

while confirmed_primes < 1000:
test_number += 1

if test_number % 2 and test_number % 3 and test_number % 5 and test_number % 7:
is_prime = True

for divisor in range(11, int(math.sqrt(test_number))+1):
if test_number % divisor == 0:
is_prime = False

if is_prime:
confirmed_primes += 1

print test_number

关于python - 使用 Python 查找第 N 个素数的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18877317/

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