用筛法求N之内的素数。(1<=N<=10000000)
时间: 2024-02-25 18:52:59 浏览: 158
Python 2种方法求某个范围内的所有素数(质数)
好的,这是一个经典的算法问题。我们可以使用埃拉托色尼筛法(Sieve of Eratosthenes)来解决这个问题。
具体步骤如下:
1. 先创建一个长度为N+1的数组,用来记录每个数字是否是素数,初始值都为true。
2. 从2开始,将2的倍数(除2以外)都标记为false,因为它们不是素数。
3. 找到下一个未标记为false的数字p,将p的倍数(除p以外)都标记为false。
4. 重复步骤3,直到p²>N。
5. 遍历数组,输出所有标记为true的数字,即为N以内的素数。
以下是Python代码实现:
```python
def sieve_of_eratosthenes(n):
is_prime = [True] * (n+1)
is_prime[0], is_prime[1] = False, False
p = 2
while p**2 <= n:
if is_prime[p]:
for i in range(p**2, n+1, p):
is_prime[i] = False
p += 1
primes = [i for i in range(n+1) if is_prime[i]]
return primes
```
调用`sieve_of_eratosthenes(N)`即可得到N以内的素数列表。
阅读全文