看板 java 關於我們 聯絡資訊
本人資工系的小大一 使用的是Java的VSC 今天課堂練習有個問題難以解決 文題如下: 使用者輸入一陣整數n,找出小於等於n中,其質因數只有2或3或5的數字總和. 不太理解的地方是如何把其他除了2.3.5以外的質數取出當作條件 把不合的數字去掉 本人目前教到for迴圈 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.217.108.80 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/java/M.1571843388.A.AEF.html
ssccg: 這是數學問題吧,條件應該是用235可以組出、且小於n的數字 10/23 23:29
Pipboy2012: https://imgur.com/a/ZpGqyl9 10/23 23:29
ssccg: 不需要去管其他質數 10/23 23:29
Pipboy2012: 只要有除了2.3.5以外的質因數這數字就不能加到迴圈 10/23 23:30
Pipboy2012: 應該說 只要有這3個以外的質數包含在裡面就不能用 10/23 23:33
ssccg: 你現在的想法是1~n濾掉不合的,你可以想想組出符合條件,但 10/23 23:34
ssccg: 不超過n怎麼寫 10/23 23:34
Pipboy2012: emm 抱歉 有點不太懂.. 10/23 23:40
ssccg: 符合條件的數字,x = 2^a * 3^b * 5^c 10/24 00:01
ssccg: x <=n,2的部分是2^0,2^1,2^2...2^a 皆<=n,3、5同理 10/24 00:03
ssccg: 可以用三層迴圈各別跑2、3、5的部分 10/24 00:04
ssccg: 因為教到迴圈我猜是要往這個方向解啦,當然你的作法也可以 10/24 00:05
ssccg: 但是看起來還沒教怎麼記數字下來? 不然你應該自己就會解吧 10/24 00:05
Pipboy2012: 喔 我懂了 但是這樣還是會卡其他質數 10/24 00:25
Pipboy2012: 舉個例子 22 他有11這個麻煩的傢伙 但他有2 10/24 00:26
Pipboy2012: 這樣的話2^a就會算到他 10/24 00:26
Pipboy2012: 那20呢? 他有2*2*5 這樣迴圈算不到呢 10/24 00:28
ssccg: 2^a只有2,4,8,16,32...怎麼會算到22? 20=2^2*3^0*5^1有啊 10/24 00:34
ssccg: 不是三個迴圈,是三層 10/24 00:35
Pipboy2012: 喔!!! 好 我試試看 10/24 00:44
Pipboy2012: 非常謝謝 10/24 00:45
Pipboy2012: 抱歉..我沒試成功...迴圈的部分可以再詳細一點嗎? 10/24 00:54
Pipboy2012: 有run過了 還是卡住 10/24 00:54
ssccg: i=1,2,4...(<=n) j=1,3,9...(<=n) k=1,5,25...(<=n) 10/24 01:28
ssccg: x=i*j*k,如果x<=n就是要求的數之一,只能說到這了 10/24 01:30
ssccg: 你要檢查一下迴圈繼續的條件,你上面圖裡i>=n是錯的 10/24 01:31
WildCherry: int sum = 0; 10/24 20:35
WildCherry: int n = 99; 10/24 20:35
WildCherry: for (int i = 0; i <= n; i++) { 10/24 20:35
WildCherry: if (i % 2 == 0 && i % 3 == 0 && i % 5 == 0 ) { 10/24 20:35
WildCherry: sum += i; 10/24 20:35
WildCherry: } 10/24 20:36
WildCherry: } 10/24 20:36
WildCherry: System.out.println(sum); 10/24 20:36
WildCherry: 這樣有錯嗎XD 10/24 20:36
ssccg: 樓上你寫的是質因數「有」2和3和5 10/24 22:01
ssccg: 題目是質因數「只有」2或3或5 10/24 22:01
WildCherry: 哦哦 中文太差了 大概想一下 改一下for迴圈內容 10/24 22:43
WildCherry: j = 1; 10/24 22:43
WildCherry: if (i % 2 == 0) { 10/24 22:43
WildCherry: while (Math.pow(2, j) <= i) { 10/24 22:43
WildCherry: if (i == Math.pow(2, j)) { 10/24 22:44
WildCherry: sum += i; 10/24 22:44
WildCherry: break; 10/24 22:44
WildCherry: } 10/24 22:44
WildCherry: j++; 10/24 22:44
WildCherry: } 10/24 22:44
WildCherry: } 10/24 22:44
WildCherry: 3跟5就一樣的模式 大概想一下的答案 應該不是最佳解XD 10/24 22:45
ssccg: 這看起來會是「只有2」或「只有3」或「只有5」 10/25 09:33
adrianshum: 比較簡單的做法是(假設x 大於 1):while(x > 1) { if 10/25 19:19
adrianshum: (x%2 ==0) x /=2; else if (x%3 ==0) x/=3; else if 10/25 19:19
adrianshum: (5 照著做)else return false; } return true; 10/25 19:19
adrianshum: 簡單來說,一直以2,3,5 去除該數,最後變1 的就是因 10/25 19:21
adrianshum: 數只有235,否則則包含其他質因數。 10/25 19:21
adrianshum: 咦我看錯題目了 10/25 19:22
ssccg: 單一個數的檢驗是可以這樣做沒錯啦 10/25 21:06
adrianshum: 所以才說看錯題目了 XD 10/25 21:19
ssccg: https://ideone.com/dmojU5 10/25 21:20
ssccg: 參考,第一段是我說的方法,第二段是原PO一開始想的方法 10/25 21:22
GGing: 要不要直接 po 在 stackoverflow 呀!XD 10/26 08:17
icpc0928: 我也是剛學迴圈,我的做法是這樣 https://i.imgur.com/ 12/27 00:15
icpc0928: hlLgmnd.jpg 12/27 00:15
icpc0928: https://i.imgur.com/hlLgmnd.jpg 12/27 00:17