📅  最后修改于: 2023-12-03 15:39:08.354000             🧑  作者: Mango
Eratosthenes 筛法是一种用于寻找质数的算法。在输入一个数字上限后,它会输出该数字范围内所有的质数。
Eratosthenes 筛法的过程如下:
以下是 Eratosthenes 筛法的 Java 代码实现:
import java.util.ArrayList;
import java.util.List;
public class EratosthenesSieve {
public static List<Integer> findPrimes(int limit) {
boolean[] primes = new boolean[limit + 1];
List<Integer> result = new ArrayList<>();
// Step 1
for (int i = 2; i <= limit; i++) {
primes[i] = true;
}
// Step 2
primes[0] = false;
primes[1] = false;
// Step 3
for (int i = 2; i * i <= limit; i++) {
if (primes[i]) {
for (int j = i * i; j <= limit; j += i) {
primes[j] = false;
}
}
}
// Step 4
for (int i = 2; i <= limit; i++) {
if (primes[i]) {
result.add(i);
}
}
return result;
}
public static void main(String[] args) {
List<Integer> primes = EratosthenesSieve.findPrimes(100);
System.out.println(primes);
}
}
在 findPrimes
方法中,我们创建了一个 boolean
类型的数组 primes
,用来指代每一个数字是否是质数。
初始化 primes
数组时,我们将数组中下标为 0 和 1 的元素标为 false
,因为它们不是质数。
遍历数组中的每一个数字,如果该数字是质数,则将该数字所有倍数对应的 primes
数组元素标为 false
。
遍历 primes
数组,将数组中依然为 true
的元素加入结果 List
中,最终将结果返回。
在本例中,我们在 main
方法中调用了 findPrimes
方法,并传入参数 100
,表示获取 100 以内的质数。最终输出结果为 [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]。
通过 Eratosthenes 筛法,我们可以快速而高效地找出一个给定范围内的所有质数。在此例中,我们通过 Java 代码实现了该算法,并对其进行了详细讲解,希望能够帮助你更好地理解 Eratosthenes 筛法的实现过程。