实现“挨拉托色尼的筛子”

来源:互联网 发布:一采通采购软件 编辑:程序博客网 时间:2024/04/27 18:23
package algorithm;import java.util.ArrayList;/** * 实现“挨拉托色尼的筛子” * @author mike * */public class Sieve {    /**     * 输入:一个正整数,n>2     * 输出:包含所有小于等于n的质数的数组列表     * @param n     * @return     */    public static ArrayList<Integer> sieve(int n) {        int[] A=new int[n+1];        ArrayList<Integer> result=new ArrayList<>();        //循环列出n以内大于1的整数,当成待筛选的数据        for (int i=2;i<=n;i++) {            A[i]=i;        }        for (int i = 2; i < (int )Math.sqrt(n); i++) {//i*i不会大于n,故n的开根号向下取整            if (A[i]!=0) {//i没有被前面的步骤消去                int j=i*i;                while (j<=n) {                    A[j]=0;//该元素标记为消去                    j=j+i;                }            }        }        //将剩余的元素复制到result数组列表中        for (int i = 2; i <= n; i++) {            if (A[i]!=0) {                result.add(A[i]);            }        }        //返回result数组列表        return result;    }    public static void main(String[] args) {        ArrayList<Integer> result=sieve(12);        System.out.println("result的大小:"+result.size());        for (int i = 0; i < result.size(); i++) {            if (i%5==0) {                System.out.println();            }            System.out.print(result.get(i)+"\t");        }    }}
0 0
原创粉丝点击