繁体   English   中英

如何找到第一个除以前20个数字的数字?

[英]How do I find the first number that divides with the first 20 numbers?

我想找到可以无提示(完美除法)除以前20个数字(1、2、3 ... 20)的最小数字。

我尝试了一些我认为不会失败的事情,如下所示:

for (int i = 20; i < Integer.MAX_VALUE; i++) {
    int seImparte = 0;
    for (int j = 1; j <= 20; j++) {
        if (i % j != 0) {
            seImparte++;
        }
    }
    if (seImparte == 0) {
        System.out.println(i);
        break;
    }
}

我以为我会得到第一个数字,然后程序会退出,但是它运行了,没有任何反应。

感谢您的时间和帮助!

@raulGLD您的代码可以正常运行,但是没有被限制

您可以在无效条件后中断内部循环
也可以从3或7开始,因为[1,2,3,4,5,6可以通过[4,6,8,10,12]进行测试
- 这是可选的,但休息很重要

     for (int i = 20; i < Integer.MAX_VALUE; i++) {
      int seImparte = 0;
        for (int j = 7; j <= 20; j++) {
            if (i % j != 0) {
                seImparte++; break;
            }
        }
        if (seImparte == 0) {
            System.out.println(i);
            break;
        }
    }

输出:232792560

代替优化蛮力方法,值得使用简单的数学规则。

结果复杂度为O(n*log(n))反对“巨大数量”

Python代码使用最小公倍数函数

def gcd(a, b):
    while b > 0:
        a, b = b, a % b
    return a

def lcm(a, b):
    return a * b // gcd(a, b)     # integer division


d = 1
for i in range(2, 21): #last i=20
    d = lcm(d, i)

print(d)

>>[Dbg]>>> 232792560

同样,我们可以将范围内所有数字分解为质数,并记住每个质数的最大幂。 在这种情况下: 2:4; 3:2; 5:1; 7:1; 11:1; 13:1; 17:1; 19:1 2:4; 3:2; 5:1; 7:1; 11:1; 13:1; 17:1; 19:1 2:4; 3:2; 5:1; 7:1; 11:1; 13:1; 17:1; 19:1并乘以这些能力。 更复杂的代码(但是这种方式有时可能有用)

232792560 = 16 * 9 * 5 * 7 * 11 * 13 * 17 * 19

希望这是您正在寻找的:

for (int i = 2; i < Integer.MAX_VALUE; i++) {
        for (int j = 2; j <= 20; j++) {
            if (i % j == 0) {
                System.out.println("i : "+i+" j : "+j);
                break;
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM