這個問題困擾我大約三四個小時
下面是我思考問題的一些流程與做法
第一,回想與思考質數的意義
有一段時間沒碰數學,需要臨時惡補一番
查閱資料顯示質數只能被1與自己整除
簡而言之,例如整數5只能被1與5整除,僅有兩個因數
但是像整數6就有 1、2、3等因數,因此整數6非為質數
第二,是要如何利用其特性去找出特定範圍的質數
為此利用Java的餘數運算子 % 配合 if 判斷式找出餘數為0的被除數
透過這個特性去計算被除數可以被多少個小於等於自己的整數整除幾次
也就是去計算有多少個因數
只要可以整除的數字超過兩個就可以確定非為質數
第三,是要如何透過for迴圈去反覆計算60以內的數字
為此使用兩個迴圈,外層for迴圈為被除數而內層for迴圈則為除數
( 類似列九九乘法表的概念 )
而除數必須要小於等於被除數 ( 如果對於這段話有問題可以查閱因數與質數的定義 )
所以必須要用外層for迴圈條件變數去限制內層迴圈的判斷條件上限
( 不知道這樣說對不對 XD )
注意!外層迴圈要從2開始計算,因為1不算是質數
第四,要如何去計算整數可以被多少數字整除
透過一個變數counter來記錄被除數被整除的次數
利用 if 判斷式看 % 餘數運算子的餘數是否為0
如果為0則counter就+1
最後再用一個 if 判斷式看counter是否大於2
記住,當前被除數流程跑完後counter要歸零
這樣就可以列出1到60的質數有哪些,要改為1000也可以
但是這個方式要一個一個數字完整做一次,非常吃效能
至於其他演算的方式,等之後碰到再做紀錄
-------------------------------
本次練習題程式碼如下
-------------------------------
int j,i,counter=0,max=0; //i從2開始,先將1排除在外 for(i=2;i<60 counter="0;" for="" i="" if="" j="" max="" pre="" system.out.println=""> 60>
沒有留言:
張貼留言