逛奔的蜗牛

我不聪明,但我会很努力

   ::  :: 新随笔 ::  ::  :: 管理 ::

从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);

    }

}


posted on 2009-07-01 00:13 逛奔的蜗牛 阅读(532) 评论(0)  编辑 收藏 引用 所属分类: Java

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理