我正在尝试我们的项目Euler,我已经遇到了问题5,这就是问题所在:
从1到20的所有数字均可被整除的最小正数是多少?
这就是我想出来的:
for (int x = 1; x >= 100100100; x++) { //100100100 is just a number to count to, an end point.
int count = 0;
for (int b = 1; b <= 20; b++) {
if (x % b == 0) { //Tests numbers.
count++; //Counter
if (count == 20) { //Numbers that fit between 1 and 100100100
System.out.println(x);
}
}
}
}
当我运行它时,它不会打印值。我做错了什么/被忽视了?
答案 0 :(得分:2)
从以下位置更改循环:
for (int x = 1; x >= 100100100; x++) {
为:
for (int x = 1; x <= 100100100; x++) {
实际上,你甚至没有进入循环体,因为在初始化值之后你没有验证条件。
答案 1 :(得分:1)
首先,问题的真正要求是找到可以被1到20之间的所有数字整除的最小数字。这意味着您不需要在代码100100100中处理另一个数字。所有你需要做的是找到范围内所有素数的最大幂。在这种情况下它将是
2 ^ 4 * 3 ^ 2 * 5 * 7 * 11 * 13 * 17
答案 2 :(得分:0)
你的最大值很小。你需要以不同的方式解决你的问题,因为暴力需要太长时间(事实上,大多数项目的euler任务都会这样做)这是因为他们中的大多数都是数学挑战而不是真正的编程挑战。
你需要做些什么来计算出这个数字所具有的因素。
2 => must be a multiple of 2
3 => must also be a multiple of 3
4 => must be a multiple of 2 and 2
5 => must be a multiple of 5
6 = > must be a multiple of 2 and 3
从2到6你需要2 * 2 * 3 * 5是满足所有这些或60的最小因素。对于2到20你需要考虑它们全部。注意:它将是7,11,13,17和19的倍数。一旦你找到了你需要的因子,
答案 3 :(得分:0)
这不是你问题的答案,因为它已被回答,但我的意见是:
你应该这样做:
boolean flag = true;
if(x % b !=0){ // If one number does not meet the condition
flag = false; // A flag tells you the test failed
}
而不是计算每个项目。并且while
循环计数到无穷大。
此外,解决方案SPOILER ALERT:对于问题的解决方案,我的方法是使用素数和称为素数分解的东西。