java筛选法_java 筛选法求素数

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,

已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页