1. 程式人生 > >用“埃氏篩法”求2~10000以內的素數。2~100以內的數,先去掉2的倍數,再去掉3的倍數,再去掉5的倍數,……依此類推,最後剩下的就是素數。

用“埃氏篩法”求2~10000以內的素數。2~100以內的數,先去掉2的倍數,再去掉3的倍數,再去掉5的倍數,……依此類推,最後剩下的就是素數。

package Homework;
public class Test2 {
public static void main(String[] args){
      int[] a=new int[10000];
 for(int i=0;i<a.length;i++){  //初試化陣列,a[0]=2;
 a[i]=i+2;
    }
      for(int m=1;findi(a,m)*findi(a,m)<a.length;m++){         //埃拉託斯特尼篩法:要得到自然數n以內的全部素                                                                      //數,必須把不大於
     for(int n=0;n<a.length;n++){                    //  的所有素數的倍數剔除,剩下的就是素數.
     if(findi(a,m)!=0){                         //先判斷分母不會0,再進行下一步
     if(a[n]%(findi(a,m))==0&&a[n]!=(findi(a,m))){          //將能被m整除的數賦值為0(m                                                                              //本身除外)
      a[n]=0;
       }
    }
    else break;
     }
  }
      printzheng(a);
}

public static int findi(int[] b,int m){          //找出陣列中第m個不為0的數
int n=0;
int c=0;
for( int i=0;n<m;i++){
c++;                        //先加,然後再進行判斷。
if((b[i])!=0){
n++;
 }
  }
  return b[c-1];
}
    public static void printzheng(int[] b){               //輸出陣列中所有不為0的數
    for(int i=0;i<b.length;i++){
    if (b[i]!=0){
    System.out.println(b[i]);
    }
    }
    }
}