python-3.x 编写求第n个素数项的程序求第10001个素数

1l5u6lss  于 2022-11-26  发布在  Python
关注(0)|答案(1)|浏览(120)

实际上,我已经编写了我的第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))

提前感谢您的帮助:)

wydwbb8l

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
祝你好运!

相关问题