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