实际上,我已经编写了我的第n项函数,它接受n并编译“素数”列表中的所有素数,并返回素数的索引位置-1,即第10001个素数:请如果有人可以改善我的代码或写一个更好的代码为这个问题。
def nthprime(n):
primes = [2]
attempt = 3
while len(primes) < n: # it runs until the len of primes is greater or equal to n
if all(attempt % prime != 0 for prime in primes):
primes.append(attempt)
attempt += 2
break
return primes[-1]
print(nthprime(10001))
提前感谢您的帮助:)
1条答案
按热度按时间wydwbb8l1#
您的代码非常好,而且非常像Python:)
但是,您正在实现的算法可以进行优化,因为您不需要检查每个素数,将其作为新尝试的数的因子;例如,以"5"结尾的数字通常不是素数(我相信你能明白为什么)。
我建议你去看看埃拉托色尼的筛法,这是一个著名的素数筛法,也就是说,一个算法可以找到所有的素数直到某个数字。我在这里链接了维基百科,从那里你也可以找到一些关于更现代的筛法的信息,尽管它们都是基于相同的原理。
https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
mCoding的James还制作了一些关于在Python中实现这个的视频,并展示了如何扩展这些想法以获得一些真正大的素数列表,所以如果你想获得一些关于如何改进代码的灵感,这些将是一个很好的起点:
https://www.youtube.com/watch?v=JA_YrFwE1hc
https://www.youtube.com/watch?v=xwM8PGBYazM
祝你好运!