可以被1到20的所有数字整除的最小正数是多少?

时间:2014-01-03 13:05:56

标签: java

这是我的代码

class Euler5
{
 public static void main(String args[])
 {
 long i=2520l;
 int flag= 1;
 if(flag == 1)
 {
  search:
  for(int j=10;j<=20;j++)
   {
    long a=i%j;
    if(a!=0)
    {
     i+=20;
     break search ;
    }
    if(j==20)
    {
    flag=0;
    }
   }
 }
 System.out.print(i);

   }
 }

它始终打印2540.我找到了解决它的其他方法。但是什么打击我是为什么这不起作用?

4 个答案:

答案 0 :(得分:3)

if(flag == 1)替换为while (flag == 1)。否则,您将只会在11个值上迭代一次。

答案 1 :(得分:1)

这是因为:

  1. 首次迭代后,j增加1
  2. 第二次迭代i % j上的
  3. != 0
  4. 如果有条件,则i20递增i = 2540
  5. 你在那里打破了循环。
  6. 因此结果为2540

答案 2 :(得分:1)

这是因为当你的for循环执行j的第二次值时,11会导致你的表达式为{ long a=2520/11
设置a to 1的值不满足您的if条件并输入if条件

if(a!=0)
{
   i+=20;
   break search ;
}  

之后它会破坏你的for循环并终止执行,总是给出输出2540。

答案 3 :(得分:1)

你的方法似乎不是正确的方法。你必须从1到20而不是10到20.你应该像Ivaylo Strandjev所说的那样在一段时间内完成这一切。也许更简单的解决方案是将2到20个数字除以素因子并添加唯一因子

e.g。 :

2 => 1 * 2
3 => 1 * 3
4 => 1 * 2 * 2
5 => 1 * 5
6 => 1 * 2 * 3

然后你保持独一无二的

1 * 2 => keep both
1 * 3 => keep only 3
1 * 2 * 2 => keep only the second 2
1 * 5 => keep only 5
1 * 2 * 3 => keep nothing

total 1 * 2 * 3 * 2 * 5 = 60 is the smallest int divisible by 2,3,4,5 and 6

你会找到17,907,120作为你的解决方案

我不擅长Java :(