Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python查找第n个素数的枚举_Python_Loops_Primes_Enumeration - Fatal编程技术网

使用Python查找第n个素数的枚举

使用Python查找第n个素数的枚举,python,loops,primes,enumeration,Python,Loops,Primes,Enumeration,我已经决定是时候开始学习编码了。我有一些HTML和CSS的知识,但我希望能够为iOS开发。我知道我还有很长的路要走,但我的目标是一步一步地到达那里 我正在iTunes U上完成麻省理工学院Python课程,我被家庭作业困住了。我理解枚举的概念,并测试每一个可能的结果以找到素数,但是我迄今为止的尝试失败了。我最近的尝试如下 # counting confirmed primes. For loop should do remainder tests on # all testNumbers, un

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

我正在iTunes U上完成麻省理工学院Python课程,我被家庭作业困住了。我理解枚举的概念,并测试每一个可能的结果以找到素数,但是我迄今为止的尝试失败了。我最近的尝试如下

# 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
#计算已确认的素数。For循环应该在
#所有TestNumber,除非被排除在外的if语句捕获
#2,3,5,7的倍数来加快速度。除数增加1
#在那些没有通过限定if语句提取的数字上
testNumber=2
confirmedTime=0
而(确认时间<1001):
对于范围(1,testNumber+1)中的除数:
如果(测试编号/2)*2==测试编号:
testNumber+=1
elif(测试编号/3)*3==测试编号:
testNumber+=1
elif(测试编号/5)*5==测试编号:
testNumber+=1
elif(测试编号/7)*7==测试编号:
testNumber+=1
elif(testNumber%除数==0):
testNumber+=1
确认时间+=1
打印测试编号
然而,这并没有返回我期望的“7919”,但是。它返回“7507”,所以在某个地方有一些复合材料从网中滑过


我已经搜索了这个网站,但没有解决它,所以我想我会问一下。

这里有一些问题,所以让我们一步一步来

首先设置初始值,这是非常合理的

testNumber=2
confirmedPrime = 0
然后进入while循环,直到变量
confirmedTime
的值达到(即等于或大于)1001为止。我假设您的任务是找到第1000个素数,但这样做实际上就是找到第1001个素数,因为
while
循环一直持续到
confirmedTime
的值为1001。换成

while(confirmedPrime < 1000):
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
循环完成后,将
confirmedTime
增加1,而不实际检查是否找到素数。因此,只有在第一个测试都不为真且“除数测试”都不为真的情况下,才会增加确认时间

使用下划线而不是mixedCase(这是糟糕的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
导入数学
测试编号=7#已知道最多7个
已确认的素数=4#已经知道2、3、5和7
当确认_素数<1000时:
测试编号+=1
如果测试单元编号%2和测试单元编号%3和测试单元编号%5和测试单元编号%7:
_prime=True吗
对于范围(11,int(math.sqrt(test_number))+1中的除数:
如果测试数%除数==0:
素=假吗
如果是_素数:
已确认的_素数+=1
打印测试编号

这里有一些位不正确,所以让我们一步一步走

首先设置初始值,这是非常合理的

testNumber=2
confirmedPrime = 0
然后进入while循环,直到变量
confirmedTime
的值达到(即等于或大于)1001为止。我假设您的任务是找到第1000个素数,但这样做实际上就是找到第1001个素数,因为
while
循环一直持续到
confirmedTime
的值为1001。换成

while(confirmedPrime < 1000):
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
循环完成后,将
confirmedTime
增加1,而不实际检查是否找到素数。因此,只有在第一个测试都不为真且“除数测试”都不为真的情况下,才会增加确认时间

使用下划线而不是mixedCase(这是糟糕的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
导入数学
测试编号=7#已知道最多7个
已确认的素数=4#已经知道2、3、5和7
当确认_素数<1000时:
测试编号+=1
如果测试单元编号%2和测试单元编号%3和测试单元编号%5和测试单元编号%7:
_prime=True吗
对于范围(11,int(math.sqrt(test_number))中的除数+1