0

我刚开始学习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:])
4

2 回答 2

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
于 2013-07-05T15:42:17.490 回答
0

这里的问题是您生成最多 n 的素数并将它们存储在列表中。显然,这个列表的项目少于n,所以当你试图找到nth素数时,你会得到"index out of range error".

要解决此问题,您可以在找到素数之前生成素数nth,或者您可以选择更大的上限来生成素数列表。您可以使用它来帮助您选择上限。

于 2013-07-05T15:36:55.873 回答