Eratosthenes埃氏筛法是一种用于获取素数列表的算法。它的基本思想是从小到大依次筛除非素数,最终留下的即为素数列表。
算法步骤如下:
- 创建一个长度为n+1的布尔类型数组isPrime,并将所有元素初始化为true。
- 标记isPrime[0]和isPrime[1]为false,因为它们不是素数。
- 从2开始遍历到sqrt(n):
- 如果isPrime[i]为true,则将i的倍数j标记为false(j从2倍开始,直到j<=n/i)。
- 遍历isPrime数组,将值为true的索引加入到素数列表中。
算法的优点:
- 算法的时间复杂度为O(nloglogn),效率较高。
- 不需要进行质因数分解,可以直接获得素数列表。
- 空间复杂度较低,仅需要一个长度为n+1的数组。
算法的缺点:
- 只能获取n范围内的素数列表,无法获取更大范围内的素数。
使用C语言实现Eratosthenes埃氏筛法获取素数列表算法的代码如下:
#include <stdio.h&