筛选法,是指从小到大筛去一个已知素数的所有倍数。例如:根据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);
}
}
}
}