import java.util.ArrayList;
import java.util.List;
/**
* 筛选法求素数
* @author wl
*
*/
public class FilterPrime {
private final static int N=1000;
public static void main(String[] args) {
List list=getPrime(N);
System.out.println(N+"以内的素数有:"+list.size()+"个!!!");
for(int i=0;i
System.out.print(list.get(i)+",");
if((i+1)%10==0){
System.out.println();
}
}
}
public static List getPrime(int n){
List list=new ArrayList();
int minPrime=2;//最小素数
int doub;
int[] arr=new int[n+1];
for(int j=2;j<=n;j++){//初始化arr数组,将2——N的下标对应的值初始化为1;
arr[j]=1;
}
while(minPrime
/**
* 以下为将minPrime的n倍(n=2,3,4,5......)标记为0;
*/
doub=2*minPrime;//minPrime的2倍
while(doub
arr[doub]=0;
doub=doub+minPrime;//minPrime的3倍、4倍.......
}
do{
minPrime++;
}while(arr[minPrime]==0);//arr[minPrime]==0时说明minPrime不是素数,应该minPrime++;
}
for(int m=2;m
if(arr[m]==1){
list.add(m);
}
}
return list;
}
}
结果为:
1000以内的素数有:168个!!!
2,3,5,7,11,13,17,19,23,29,
31,37,41,43,47,53,59,61,67,71,
73,79,83,89,97,101,103,107,109,113,
127,131,137,139,149,151,157,163,167,173,
179,181,191,193,197,199,211,223,227,229,
233,239,241,251,257,263,269,271,277,281,
283,293,307,311,313,317,331,337,347,349,
353,359,367,373,379,383,389,397,401,409,
419,421,431,433,439,443,449,457,461,463,
467,479,487,491,499,503,509,521,523,541,
547,557,563,569,571,577,587,593,599,601,
607,613,617,619,631,641,643,647,653,659,
661,673,677,683,691,701,709,719,727,733,
739,743,751,757,761,769,773,787,797,809,
811,821,823,827,829,839,853,857,859,863,
877,881,883,887,907,911,919,929,937,941,
947,953,967,971,977,983,991,997,