优化一下算法def nthPrime(n: int, k: int) -> int: isPrime = [True] * (n+1) primes = [] for i in range(2, n+1): if isPrime[i]: primes.append(i) if len(primes) == k: return primes[k-1] for j in range(i*2, n+1, i): isPrime[j] = False return -1 # 如果没有找到第k个素数,则返回-1
时间: 2024-01-24 14:04:55 浏览: 57
Js面试算法详解
可以对算法进行以下优化:
1. 从3开始遍历时,只需要遍历到sqrt(n),因为超过sqrt(n)的数的倍数已经被之前的数标记过了。
2. 对于每个素数i,从i^2开始遍历其倍数,因为i的倍数中小于i^2的数已经被之前的素数标记过了。
下面是优化后的Python实现代码:
```
def nthPrime(n: int, k: int) -> int:
if k == 1:
return 2
isPrime = [True] * (n+1)
primes = [2]
for i in range(3, int(n**0.5)+1, 2):
if isPrime[i]:
primes.append(i)
if len(primes) == k:
return primes[k-1]
for j in range(i*i, n+1, i*2):
isPrime[j] = False
for i in range(primes[-1]+2, n+1, 2):
if isPrime[i]:
primes.append(i)
if len(primes) == k:
return primes[k-1]
return -1 # 如果没有找到第k个素数,则返回-1
```
该算法的时间复杂度为O(nloglogn),空间复杂度为O(n)。
阅读全文