首页 > 代码库 > 每日一记--2014.9.14
每日一记--2014.9.14
今天的小程序是厄拉多塞筛--寻找小于整数N的所有素数
厄拉多塞筛的基本思想是:从最小的素数2开始,首先把2圈出,然后将2的倍数去除。找出下一个未被圈出的数3,将3的倍数去除。找出下一个未被圈出的数35,将5的倍数去除,以此类推,直到N的平方根为止,就不需将其倍数去除了。最后剩余的被圈出的数就是要找的素数。
1 package 判断素数; 2 3 import java.util.ArrayList; 4 5 public class Shai { 6 public static void main(String[] s){ 7 System.out.println( findPrime(100)); 8 } 9 private static ArrayList<Integer> findPrime(int n) {10 //1,先为数组中的数赋值11 int[] num = new int[n+1];//为了将n个数都存入且不与角标冲突,数组大小为n+1,这样我们只使用从角标为1的数组12 for(int i=0;i<=n;i++)13 num[i]=i;14 //2,依次去除合数,即将合数置零15 int end = (int) Math.sqrt(n);16 for(int i=2;i<=end;){17 for(int j=i*2;j<=n;j+=i){//注意j从i*2开始18 num[j]=0;19 }20 i=next(num,i);21 }22 //3,最后再遍历数组,将未被置零的数也就是素数放入list中,返回list23 ArrayList<Integer> sushu=new ArrayList<Integer>();24 for(int i=2;i<n;i++){25 if( num[i]!=0){26 sushu.add(num[i]);27 }28 }29 return sushu;30 }31 //找出下一个未被置零的数32 private static int next(int[] aa,int i) {33 while(aa[++i]==0){ 34 }35 return i;36 }37 }
每日一记--2014.9.14
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。