此代码是用Python 3编写的。我试图找到第10001个素数。
#10001st prime number
mylist=[]
def prime_index(n):
for i in range(99**99):
for x in range(2, int(i**1/2)):
if i % x == 0:
return False
return True
mylist.append(i)
n=int(n+1)
print(mylist[n])
break
prime_index(10001)
当我跑步时,它会说“列表索引超出范围”,指的是print(mylist[n])
。
但是,我一直在mylist.append(i)
的路上添加素数。所以有人可以告诉我这里的问题是什么,因为我不明白发生了什么。 99 ** 99太小了吗?或者更细微的代码问题?
答案 0 :(得分:3)
99**99
不是太小;如果你真的打印它,你就会超出你的需要(如果你试图将其运行,你永远不会完成它,它的657位工作)。但你的循环毫无意义;如果内部循环执行一次,你的内部循环将立即返回True
或False
。
"幸运的是"对你来说,它永远不会执行一次。第一个外循环第一次将i
设置为0,因此内循环根本不运行(侧注,您可能需要i ** (1/2)
,而不是i ** 1 / 2
;取幂优先级高于除法。因为它没有运行,所以你最终会将索引编入一个空列表(并且不要求索引10001)。
此代码中存在太多问题无法解决所有问题;寻找其他试验部门的主要查找代码,以了解它应该是什么样子。
答案 1 :(得分:1)
问题是,一旦找到(或没有)第一个素数,就会尝试打印出第10001个元素。另外,请注意您从例程返回时没有找到任何素数 - 如果您要那么远。无法访问附加语句。
您只需要打印语句,因为您的第一次迭代时i = 0,所以您根本不要输入 for 循环。
请遵循发布指南:花时间研究如何生成素数。它可以比你做得快得多,并且会为你提供一个很好的,简洁的代码来加入你的程序。