Smallest Multiple Algorithm using Bruteforce or GCD/LCM

  • 时间:2020-09-10 12:45:51
  • 分类:网络文摘
  • 阅读:145 次

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.
What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?

Bruteforce Algorithm to Find the Least Common Multiples

The most intuitive solution is to check number one by one and then test if it can be divisible by all the numbers from 1 to 20. A better solution is to skip 20 each time.

1
2
3
4
5
6
7
8
9
10
11
12
function checkDivision(n) {
    if (n == 0) return false;
    for (let i = 2; i <= 20; ++ i) {
        if (n % i != 0) return false;
    }
    return true;
}
 
let i = 0;
while (!checkDivision(i)) {
    i += 20;
}
function checkDivision(n) {
    if (n == 0) return false;
    for (let i = 2; i <= 20; ++ i) {
        if (n % i != 0) return false;
    }
    return true;
}

let i = 0;
while (!checkDivision(i)) {
    i += 20;
}

This takes pretty quickly to come up a solution which is 232792560

Greatest Common Divisor and Least Common Multiples

Another solution is to compute the Least Common Multiples of the numbers between 1 to 20. To compute the LCM of two numbers a, b, we need to compute the Greatest Common Divisor or both numbers.

tex_76d14b2469e9f8f27e584f068091608a Smallest Multiple Algorithm using Bruteforce or GCD/LCM algorithms javascript math project euler .

We can use the iterative approach to compute the GCD.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function gcd(a, b) {
    while (b != 0) {
        let c = a % b;
        a = b;
        b = c;
    }
    return a;
}
 
function lcm(a, b) {
    return a * b / gcd(a, b);
}
 
let res = 1;
for (let i = 1; i <= 20; ++ i) {
    res = lcm(res, i);
}
 
console.log(res);
function gcd(a, b) {
    while (b != 0) {
        let c = a % b;
        a = b;
        b = c;
    }
    return a;
}

function lcm(a, b) {
    return a * b / gcd(a, b);
}

let res = 1;
for (let i = 1; i <= 20; ++ i) {
    res = lcm(res, i);
}

console.log(res);

–EOF (The Ultimate Computing & Technology Blog) —

推荐阅读:
百度冰桶算法说明,如何避免冰桶算法呢?  百度飓风算法版本类型说明,如何破解飓风算法呢  最少要付多少元的租金  此时水的高度是多少  将原有水果卖出40%后  求这五个整数的平均数  求AB两地距离及原计划行驶时间  运输队要运2000件玻璃器皿  5厘米宽的纸6等分  据称是难倒数学教授的小学奥数题 
评论列表
添加评论