📜  实现 Eratosthenes 筛分以生成给定范围之间的质数的Java程序(1)

📅  最后修改于: 2023-12-03 15:39:08.354000             🧑  作者: Mango

实现 Eratosthenes 筛分以生成给定范围之间的质数的Java程序

Eratosthenes 筛法是一种用于寻找质数的算法。在输入一个数字上限后,它会输出该数字范围内所有的质数。

算法原理

Eratosthenes 筛法的过程如下:

  1. 根据给定范围创建一个布尔类型的数组,并将数组中所有的元素都标为 true。
  2. 将数组中下标为 0 和 1 的元素标为 false,因为它们不是质数。
  3. 从 2 开始,将范围内所有该数的倍数对应的数组元素标为 false。
  4. 执行完毕后,数组中依然为 true 的元素都是质数。
Java 代码实现

以下是 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);
    }
}
代码解释
  1. findPrimes 方法中,我们创建了一个 boolean 类型的数组 primes,用来指代每一个数字是否是质数。

  2. 初始化 primes 数组时,我们将数组中下标为 0 和 1 的元素标为 false,因为它们不是质数。

  3. 遍历数组中的每一个数字,如果该数字是质数,则将该数字所有倍数对应的 primes 数组元素标为 false

  4. 遍历 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 筛法的实现过程。