題目:
判斷101——200之間有多少個素數,並輸出所有的素數
分析:
在小學的時候,我們就知道自然數的分類可以分成很多種:奇數和偶數、素數和和數等等,所以判斷101——200間多少個素數,只需要判斷從2到這個數的平方根,是否有滿足條件的數能被我們要判斷的數整除,如果有就輸出並且記數+1
源代碼:
class sushu
{
public static void main(String[] args)
{
int count = 0; //用來記數的
int[] bingo ; //最後循環時進行區分
bingo = new int[100];
for(int i = 101; i < 200;i++)
{
int count1 = 0;
int k = (int)Math.sqrt(i);
for(int j = 2; j <= k;j++)
{
count1 += 1;
if(i % j == 0)
{
break;
}
else
{
if(count1 == k -1)
{
bingo[i-101] = 1;
}
}
}
if(bingo[i -101] == 1)
{
count++;
System.out.println(i);
}
}
System.out.println("滿足條件的素數的個數是:"+count);
}
}
難點:
①首先,在判斷素數時,因爲從2到sqrt(i),要判斷這麼多次,所以不好直接下結論(這個數是素數),針對這點,我是提前定義了一個count1,用來記數,因爲是for循環,如果一個數是素數,這就意味着它會將循環進行完看看有沒有能被它整除的數,如果有,就以爲值i是合數,那麼bingo也肯定是0,如果不是,就意味着count1累加到了sqrt(i)-1次,從而bingo賦值爲1,作爲最後的判斷
②剛開始的時候,沒有用數組,而是直接bingo,所以開始做的時候,代碼運行結果明顯有問題,因爲bingo被覆蓋了,值一直是0
③創建數組是還是要注意,動態和靜態不能同時,否則會報錯,我就直接·int[] bingo = new int[100];報錯了
代碼截圖:
另一種解法:
public class SwitchDemo
{
public static void main(String[] args)
{
int m = 101;
int n = 200;
int count = 0;
//統計素數個數
for(int i=m;i<n;i++)
{
if(isPrime(i))
{
count++;
System.out.print(i+" ");
if(count%10==0){
System.out.println();
}
}
}
System.out.println();
System.out.println("在"+m+"和"+n+"之間共有"+count+"個素數");
}
//判斷素數
private static boolean isPrime(int n)
{
boolean flag = true;
if(n==1)
flag = false;
else{
for(int i=2;i<=Math.sqrt(n);i++)
{
if((n%i)==0 || n==1)
{
flag = false;
break;
}
else
flag = true;
}
}
return flag;
}
}
這個代碼運行沒有問題,但是我不想看,嗚嗚嗚~~~(自己的思路,自己看的清楚)
寫在最後:
想要一起學Java的小夥伴加我微信W17663712231,我的微信公衆哈"空谷小莜藍",大家一起努力!