def nth_prime(n): primes=[2] num=3 while len(primes)<n: for p in primes: if num%p==0: break else: primes.append(num) num+=2 return primes[-1] s=int(input()) print(nth_prime(s)) 怎么优化
时间: 2024-01-02 10:03:47 浏览: 70
可以考虑使用更高效的素数筛法来优化代码。例如,可以使用埃氏筛法或欧拉筛法,这两种算法都可以更快地生成素数序列。
下面是欧拉筛法的实现示例:
```python
def nth_prime(n):
is_prime = [True] * (n * 20)
primes = []
for i in range(2, n * 20):
if is_prime[i]:
primes.append(i)
for p in primes:
if i * p >= n * 20:
break
is_prime[i * p] = False
if i % p == 0:
break
return primes[n - 1]
s = int(input())
print(nth_prime(s))
```
这个实现中,我们首先创建一个长度为 n*20 的布尔数组 is_prime,用来表示每个数是否为素数。然后从 2 开始遍历到 n*20,如果当前数是素数,将其添加到 primes 列表中。接着,遍历 primes 列表中的素数,将当前素数与后面的数相乘,将其标记为合数。如果当前数可以整除已知素数,则停止遍历,因为这个数已经被标记为合数了。最后返回第 n 个素数。
注意,欧拉筛法的时间复杂度为 O(n log log n),相比埃氏筛法的 O(n log n) 更优秀。
阅读全文