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,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值