java经典算法——筛选法查找100以内的素数

     筛选法是指从小到大筛去一个已知素数的所有倍数。例如:根据2,我们筛选去4,6,8,....,98,100等数,然后根据3,我们可以筛选9,15,...99等数(注意此时6、12等数早就被筛去了),由于4被筛去了,下一个用于筛选的素数是5,以此类推,最后剩余的就是100以内的素数。

    首先定义一个int类型的数组int[] a,初始化整个数组,全部初始化为1,第二步双重循环,从2开始,所有2的倍数都标记为0,所有3的倍数也标记为0;然后 是 4,但因为4已经被标记为0了,跳过;接着是5,直到所有的数都循环过一遍。

代码如下:

package com.imooc.test2;

/**
 * 利用筛选法查找100以内的素数
 */
public class Test {
    public static void main(String[] args) {
        // 定义一个int类型的数组
        int[] a = new int[101];
        int i,j;

        // 初始化整个数组,全部初始化为1
        for (i = 0; i <101 ; i++) {
            a[i] = 1;
        }

        for (i=2;i<101;i++){
            if(a[i]!=0){
                for (j=i+i;j<101;){
                    // 如果能被整除,说明是一个数的倍数,赋值为0
                    if(j%i==0){
                        a[j]=0;
                        j = j+i;
                    }
                }
            }
        }

        // 遍历筛选后的数组,输出100以内的素数
       for ( i = 2; i < 101; i++) {
            if (a[i]==1){
                System.out.println(i);
            }
        }

    }
}

你可能感兴趣的:(算法)