我想对第 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
问: 通过列出前六个素数: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