Java經典案例(3)——素數問題

題目:

判斷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,我的微信公衆哈"空谷小莜藍",大家一起努力!

                                                 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章