我已经做了一个程序来寻找素数,但当我试图得到第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,这是错误的! 请帮帮我
您的代码有许多问题:
它生成的素数不是素数,例如99973=257*389
几乎不可能搞清楚它是如何决定何时找到足够的素数的
它有一些奇怪的表达,似乎毫无意义,例如:
这似乎运行代码两次!但它改变了结果! 代码注释在哪里
还有这个:
到目前为止你找到的素数的平方根是搜索下一个素数时的限制
有问题的程序往往会被重写这是一个重写程序的例子。您可以用十几行Python来解决这个问题,每行不超过大约30个字符,只需几秒钟。你的程序需要两倍多的行,有些是两倍长,而且要花将近一分钟的时间才能找到答案
我的建议是重新开始并保持简单:
你不需要
startingPrimes = [2,3, 5, 7, 11, 13, 17, 19]
。仅仅初始化primeList = [2]
就足以避免测试偶数,而只关注奇数除数你不需要
math.sqrt()
,只要测试一下if divisor * divisor > number:
和你需要的所有除数是否都在primeList
唯一需要对
primeList
执行的修改操作是append()
某个地方应该有一个明确的完成测试,例如:
相关问题 更多 >
编程相关推荐