我刚开始学习python和系统编程。对于家庭作业,我需要找到并打印第n个素数。我写下面的代码 - 我可以找到一个小于或等于n的素数列表,但是,我不知道如何从我创建的列表中打印第n个素数。我一直得到索引错误:列表索引超出范围。
我相信我错过了一些东西。有人可以看看我的代码并给我一些指导如何解决它?非常感谢您的帮助。谢谢。
import sys
import math
def s_prime(n):
is_prime=list(range(n+1))
for i in range(2, int(n**0.5)+1):
if is_prime[i]:
for j in range(i**2,n+1,i):
is_prime[j]=False
print 'Prime Value in Decimal: ', [x for x in is_prime[2:] if x]
x_list = [x for x in is_prime[2:] if x]
print x_list[n-1]
def main(argv):
input = int(sys.argv[1])
if input == 1:
print 2
elif input == 2:
print 3
else:
n = int(round(input*(math.log(input,2))))
s_prime(n)
if __name__ == "__main__":
main(sys.argv[1:])
答案 0 :(得分:1)
在此处更改了n的值n = int(round(input*(math.log(input,2))))
。它现在比原始n
更大。例如,当input = 5
时,n
为12且显然x_list
仅包含5
项,因此您将获得IndexError
,因为索引11已超出界。
您可以在此处使用否定索引:
return x_list[-1]
获取最后一个元素。
或将原始input
传递给素数函数:
def s_prime(n, inp):
print n
#you code here....
print x_list[inp-1]
def main(argv):
#your code
n = int(round(input*(math.log(input,2))))
s_prime(n, input) #pass input here
答案 1 :(得分:0)
这里的问题是你生成的素数最多为n并将它们存储在列表中。显然,此列表的项目少于n
,因此当您尝试查找nth
素数时,您会获得"index out of range error"
。
要解决此问题,您可以随时生成素数,直到找到nth
素数,或者您可以选择更大的上限来生成素数列表。您可以使用它来帮助您选择this上限。