用“埃氏篩法”求2~10000以內的素數。2~100以內的數,先去掉2的倍數,再去掉3的倍數,再去掉5的倍數,……依此類推,最後剩下的就是素數。
阿新 • • 發佈:2019-01-04
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]);
}
}
}
}
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]);
}
}
}
}