擅长:python、mysql、java
<p>对早期素数来说,埃拉托斯烯的筛分通常是最快的方法。你可以调整它以达到第n个素数。你知道吗</p>
<p>例如:</p>
<pre><code>def nthPrime(N):
sieve = [1]*(N**2)
p = 2
for _ in range(N):
while not sieve[p]: p += 1
sieve[p::p] = [0]*len(sieve[p::p])
return p
nthPrime(100) # 541
</code></pre>
<p>素数列表除数检查方法可能更容易编写和理解,但速度要慢得多(尽管对于1000个素数来说,这并没有多大区别):</p>
<pre><code>def nthPrime(N):
primes = [2]
p = 1
while len(primes)<N:
p += 2
primes += [p]*all(p%d for d in primes)
return p
</code></pre>