【问题标题】:Prime number code error 10001's prime (python)素数代码错误10001的素数(python)
【发布时间】:2019-05-27 08:08:38
【问题描述】:

我已经编写了一个程序来查找素数,但是当我尝试获取第 10001 个素数时,它是不正确的。我不知道为什么。

我并没有真正尝试过,因为我不知道该尝试什么。

import math
startingPrimes = [2,3, 5, 7, 11, 13, 17, 19]
for times in range (2):
    primeList = []
    numbersToBeTested = 0
    for _ in range (startingPrimes[len(startingPrimes)-1]**2):
        primeList.append(_ + 2)
    print ()
    numbersToBeTested = startingPrimes[len(startingPrimes)-1]**2
    print (numbersToBeTested)
    divisor = 0
    term = 0
    dividend = 0
    position = 0

    while divisor < math.sqrt(len(primeList)):
        term = 0
        divisor = startingPrimes[position]
        dividend = primeList[position]
        while term + 1 < len(primeList):

            term = term + 1
            if primeList[term] % divisor == 0:
                if primeList[term] != divisor:
                    primeList.remove(primeList[term])
        position = position + 1
    startingPrimes = primeList

for termOfList in range (len(primeList)):
    print (primeList[termOfList])
print ("How many primes: " + str(len(primeList)))
print ("10001st prime: " + str(primeList[10000]))

它给了我 90373 这是错误的! 请帮忙!

【问题讨论】:

标签: python primes


【解决方案1】:

您的代码存在许多问题:

它生成不是素数的素数,例如99973 = 257 * 389

几乎不可能弄清楚它是如何决定何时找到足够的素数的。

它有一些奇怪的表达,似乎没有意义,例如:

   for times in range (2):
       primeList = []

这似乎运行了两次代码!但它改变了结果! 代码注释在哪里!

还有这个:

while divisor < math.sqrt(len(primeList)):

到目前为止找到的素数的平方根是搜索下一个素数时的限制?

有问题的程序往往会被覆盖或覆盖——这是覆盖程序的一个例子。你可以在几分之一秒内用十几行 Python 来解决这个问题,每行不超过大约 30 个字符。您的程序需要的行数是原来的两倍多,有的行数是原来的两倍,而且需要将近一分钟才能得出答案。

我的建议是重新开始并保持简单:

您不需要startingPrimes = [2,3, 5, 7, 11, 13, 17, 19]。只需初始化 primeList = [2] 就足以避免测试偶数并专注于奇数除数。

您不需要math.sqrt(),只需测试if divisor * divisor &gt; number: 以及您需要的所有除数是否在primeList 中。

您真正需要对primeList 进行的唯一修改操作是append()

应该有一个明确的完成测试,例如:

while len(primeList) < n:  # where n = 10001

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-15
    • 2013-11-27
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多