作者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/cn.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