//根據篩選法求出100以內的所有素數,所謂篩選法是指從小到大篩去一個以知素數的所有倍數,
//例如,根據2我們可篩去4,6,8,...98,100等數.然后根據3可篩去9,15,...99等數(注重此時6,
//12等數早就被篩去了),由于4被篩去了,下一個用于篩選的素數是5...依次類推,最后剩余的就
//是100以內的素數.
/*
*auther starshus
*
*Date 04/11/20
*/
//6.7.4
public class PRime
{
private static final int MAX=100;
public static void init(int[] num)//定義數組,里面裝從1到100
{
int i=0;
for(;i<MAX;i++)
{
num[i]=i+1;
}
}
public static int count(int[] num)//在程序運行后,計算素數個數
{
int n=0,i=0;
for(;i<MAX;i++)
{
if(num[i]!=0)//非素數將被置零
n++;
}
return n;
}
public static void printf(int[] num)//輸出所有素數,每10個轉行一次
{
int i=0,n=0;
for(;i<MAX;i++)
if(num[i]!=0)
{
System.out.print(num[i]+" ");
n++;
if(n%10==0)
System.out.println();
}
}
public static void main(String[] args)//主方法
{
int i=2,j=1;
int count;
int[] numbers = new int[MAX];
init(numbers);
while (j<MAX)
{
if(numbers[j]!=0)
while (i<MAX)
{
if(numbers[i]!=0)
{
if(numbers[i]%numbers[j]==0)
numbers[i]=0;//假如不是素數,置零
}
i++;
}
j++;
i=j+1;
}
count=count(numbers);
printf(numbers);
System.out.println();
System.out.println("ok,we found "+count+"primes in "+MAX+" numbers.");
}
}
新聞熱點
疑難解答