Java: 使用”埃拉托色尼“筛选法求素数

Java: 使用”埃拉托色尼“筛选法求素数

从2开始,删除所有2的倍数的数。

然后是3,5,7,...

下一次循环进行时的第一个数一定是素数。

只进行sqrt(n)次循环,因为一个数的约数只在sqrt(n)这个范围内。

import java.util.BitSet;

import java.util.LinkedList;

import java.util.List;


public class Test {

    public static void main(String[] args) {

        int n = 100;

        BitSet b = new BitSet(n + 1);

        List<Integer> primes = new LinkedList<Integer>();

        int i = 0;

        for (i = 2; i <= n; ++i) {

            b.set(i)// 设置此位置上的位为1

        }

        

        i = 2;

        int k = 0;

        while (i * i <= n) {

            if (b.get(i)) {

                primes.add(i);

                k = 2 * i;

                while (k <= n) {

                    b.clear(k)// 清除此位置上的位为0

                    k += i;

                }

            }

            

            ++i;

        }

        

        while (i <= n) {

            if (b.get(i)) {

                primes.add(i);

            }

            

            ++i;

        }

        

        System.out.println(primes);

    }

}


你可能感兴趣的:(Java: 使用”埃拉托色尼“筛选法求素数)