我想对第 6 个质数进行罚款。为什么执行在 3 之后卡住了?

I want to fine 6th prime number. why execution is stuck after 3?

问: 通过列出前六个素数:2、3、5、7、11和13,我们可以看出第6个素数是13。 第 10001 个质数是多少?

我的代码是:

def is_prime(num):
    if all(num % i != 0 for i in range(2, num)):
        return True
    else:
        return False


def find_nth_prime(nth):
    lst_prime = []
    num = 2
    while len(lst_prime) < nth:
        if is_prime(num):
            lst_prime.append(num)
            print(len(lst_prime), ":", lst_prime[-1])
            num += 1

当我尝试 运行 find_nth_prime(6) 时,它在找到“3”作为质数后卡住了。我在这里错过了什么?

在 while 循环内的 if 语句中,它在 n=4 处不断重复,因为 n +=1 永远不会发生,因为 4 不是素数。因此将其从 if 语句中取出。

尝试使用 https://pythontutor.com/。它可以帮助您可视化您的代码

def find_nth_prime(nth):
    lst_prime = []
    num = 2
    while len(lst_prime) < nth:
        if is_prime(num):
            lst_prime.append(num)
            print(len(lst_prime), ":", lst_prime[-1])
        num += 1

您还可以对 is_prime 功能进行一些改进。因为您不必取整个范围 (2, num)。取范围 2 到 num 的平方根就足够了。 (2,int(num**0.5)+1) 或使用 python 的 math

中的 sqrt