JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】

yizhihongxing

下面是JavaScript求一组数的最小公倍数和最大公约数常用算法的详解。

什么是最小公倍数和最大公约数

在数学中,对于给定的两个或多个整数,最小公倍数是可以被其中的每一个整数整除的最小正整数,最大公约数是可以被两个或多个整数整除的最大正整数。最小公倍数和最大公约数常常用于解决各种数学问题,如分数的化简、幂的约分等等。

算法介绍

最大公约数的求解方法

在求两个数的最大公约数时,我们有三种常用的算法:欧几里得算法(辗转相减法和辗转相除法)、更相减损法和移位法。

欧几里得算法

欧几里得算法也称为辗转相减法,通过不断进行两个数的减法来求出它们的最大公约数,直到两个数相等为止。

例如,我们要求出48和60的最大公约数,可以采用如下方法:

1. 用大的数60减去小的数48,得到12
2. 然后用12去重新除以小的数48,得到余数12
3. 再用小的数48除以余数12,得到商4和余数0
4. 因为余数为0,所以48和60的最大公约数是12

其代码实现如下:

function euclidean_algorithm(a, b) {
    while (a !== b) {
        if (a > b) {
            a = a - b;
        } else {
            b = b - a;
        }
    }
    return a;
}

更相减损法

更相减损法是另一种求最大公约数的方法,它是将两个数较大的减去较小的,然后不断进行减法操作,直到两个数相等为止。

例如,我们要求出48和60的最大公约数,可以采用如下方法:

1. 用大的数60减去小的数48,得到12
2. 再将12和48比较,得到36
3. 然后将36和12比较,得到24
4. 然后将24和12比较,得到12
5. 因为得到的结果是12,所以48和60的最大公约数是12

其代码实现如下:

function subtraction_algorithm(a, b) {
    while (a !== b) {
        if (a > b) {
            a = a - b;
        } else {
            b = b - a;
        }
    }
    return a;
}

移位法

移位法使用了位运算的技巧,可以更加高效地求解最大公约数。具体做法是:把两个数不断地右移,直到它们相等,然后将它们同时左移相同的位数,最后得到的两个数就是它们的最大公约数。

例如,我们要求出48和60的最大公约数,可以采用如下方法:

1. 把48和60同时右移,得到24和30
2. 再把24和30同时右移,得到12和15
3. 再把12和15同时右移,得到6和7
4. 最后把6和7同时左移2位,得到24
5. 因为得到的结果是24,所以48和60的最大公约数是24

其代码实现如下:

function shift_algorithm(a, b) {
    if (a === 0 || b === 0) {
        return a + b;
    }
    let shift = 0;
    while (((a | b) & 1) === 0) {
        a >>= 1;
        b >>= 1;
        shift++;
    }
    while ((a & 1) === 0) {
        a >>= 1;
    }
    while (b !== 0) {
        while ((b & 1) === 0) {
            b >>= 1;
        }
        if (a > b) {
            let temp = a;
            a = b;
            b = temp;
        }
        b -= a;
    }
    return a << shift;
}

最小公倍数的求解方法

在求多个数的最小公倍数时,我们可以采用如下两种算法:基于最大公约数的求解方法和迭代法。

基于最大公约数的求解方法

最小公倍数与最大公约数是一一对应的,因此可以利用两者的关系来求解最小公倍数。对于两个数a和b,它们的最小公倍数等于a和b的乘积除以它们的最大公约数。

例如,我们要求出12、18和20的最小公倍数,可以采用如下方法:

1. 分别求出12、18和20的最大公约数,分别为6、6和20
2. 由于12、18和20的最大公约数是6,所以它们的最小公倍数是12*18*20/6=720

其代码实现如下:

function lcm_using_gcd(numbers) {
    let lcm = 1;
    for (let i = 0; i < numbers.length; i++) {
        lcm = lcm * numbers[i] / gcd(numbers[i], lcm);
    }
    return lcm;
}

迭代法

迭代法是一种简单的算法,它的基本思想是:计算两个数的最小公倍数,然后再将它与第三个数计算最小公倍数。按这样的方式,不断地进行计算,最后得到所有数的最小公倍数。

例如,我们要求出12、18和20的最小公倍数,可以采用如下方法:

1. 首先计算出12和18的最小公倍数,为36
2. 然后计算36和20的最小公倍数,为180
3. 因为得到的结果是180,所以12、18和20的最小公倍数是180

其代码实现如下:

function lcm_using_iteration(numbers) {
    let lcm = numbers[0];
    for (let i = 1; i < numbers.length; i++) {
        let j = Math.max(lcm, numbers[i]);
        while (j % lcm !== 0 || j % numbers[i] !== 0) {
            j++;
        }
        lcm = j;
    }
    return lcm;
}

示例说明

下面通过两个例子来演示如何使用这些算法来计算最小公倍数和最大公约数。

示例1

假设我们要求出35和42的最大公约数和最小公倍数,可以采用如下方法:

let result1 = euclidean_algorithm(35, 42);
let result2 = subtraction_algorithm(35, 42);
let result3 = shift_algorithm(35, 42);
let result4 = lcm_using_gcd([35, 42]);
let result5 = lcm_using_iteration([35, 42]);
console.log('35和42的最大公约数是:', result1, result2, result3);
console.log('35和42的最小公倍数是:', result4, result5);

输出结果:

35和42的最大公约数是: 7 7 7
35和42的最小公倍数是: 210 210

示例2

假设我们要求出12、18和20的最大公约数和最小公倍数,可以采用如下方法:

let result1 = euclidean_algorithm(euclidean_algorithm(12, 18), 20);
let result2 = subtraction_algorithm(subtraction_algorithm(12, 18), 20);
let result3 = shift_algorithm(shift_algorithm(12, 18), 20);
let result4 = lcm_using_gcd([12, 18, 20]);
let result5 = lcm_using_iteration([12, 18, 20]);
console.log('12、18和20的最大公约数是:', result1, result2, result3);
console.log('12、18和20的最小公倍数是:', result4, result5);

输出结果:

12、18和20的最大公约数是: 2 2 2
12、18和20的最小公倍数是: 180 180

以上是JavaScript求一组数的最小公倍数和最大公约数常用算法的完整攻略,其中包含了算法的介绍及具体的示例说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Javascript中的解构赋值语法详解

    Javascript中的解构赋值语法详解 Javascript解构赋值语法是一种简洁、高效的变量声明和赋值方式,可以在一行代码中完成多个变量的赋值。在Javascript ES6中,引入了解构赋值语法,使得变量的声明和赋值变得更加简便。下面我们来详细讲解Javascript中的解构赋值语法。 一、数组解构赋值 1. 数组解构赋值介绍 数组解构赋值,指的是将数…

    JavaScript 2023年5月27日
    00
  • window.location.href的用法(动态输出跳转)

    关于window.location.href的用法,先来介绍一下它的基本概念。 window.location.href是一个引用当前页面的URL字符串,它可以动态地改变页面的路径,实现页面的跳转。通过设置window.location.href的值,可以让当前页面跳转到指定的URL地址。 以下是window.location.href的一些常见应用场景: …

    JavaScript 2023年6月11日
    00
  • 关于JavaScript回调函数的深入理解

    关于JavaScript回调函数的深入理解 什么是回调函数 回调函数是一种在JavaScript中常见的编程模式。它是一个函数,可以作为参数传递给其他函数,以便在其他函数完成之后执行。虽然它非常实用,但许多初学者仍然对回调函数感到困惑。 当我们在使用 JavaScript 编写异步代码时,比如在进行 Ajax 请求时,我们不能直接通过在代码中写入“等待服务器…

    JavaScript 2023年6月10日
    00
  • 使用js编写实现拼图游戏

    当你想要使用JS编写实现拼图游戏的时候,你需要遵循如下的步骤: 1. 确定游戏规则和目标 在编写拼图游戏之前,你需要确定游戏的规则和目标。例如,游戏可以是一个15方块的格子,每个方块初始位置随机分布,玩家需要通过移动方块来拼成完整的图案。游戏的目标是以最少的移动步骤完成拼图。 2. 创建HTML模板 使用html创建一个基础游戏界面,在这个游戏界面中,你需要…

    JavaScript 2023年6月10日
    00
  • 关于JavaScript中事件绑定的方法总结

    针对关于JavaScript中事件绑定的方法总结,我将提供如下完整攻略: 一、什么是事件绑定 在JavaScript中,事件绑定是指将一个特定的JavaScript函数与某个HTML元素的特定事件联系起来的过程。当该事件在该元素上触发时,相应的JavaScript函数将被调用。事件绑定常用于网页交互中,比如点击按钮、拖拽事件等。 二、如何进行事件绑定 常用的…

    JavaScript 2023年6月11日
    00
  • JavaScript italics方法入门实例(把字符串显示为斜体)

    下面是详细的JavaScript italics方法入门实例攻略: 1. 概述 italics()是JavaScript的字符串方法之一,用于将字符串显示为斜体。该方法返回一个新的字符串,其中原字符串被包含在<i>标签中。 2. 语法 string.italics() 其中,string是调用该方法的字符串。 3. 示例 示例一 以下是一个简单的…

    JavaScript 2023年5月28日
    00
  • Javascript之Number对象介绍

    Javascript之Number对象介绍 什么是Number对象 在Javascript中,Number对象是一种用于表示数字(包括整数和浮点数)的内置对象。它还提供了一些用于数字处理及其格式化的方法。 如何创建Number对象 Javascript中可以使用以下两种方式来创建Number对象: 使用构造函数 let num = new Number(12…

    JavaScript 2023年5月27日
    00
  • JS module的导出和导入的实现代码

    一、JS Module导出代码实现攻略 JavaScript模块通过导出可以将模块中定义的变量、函数、类等内容暴露给外部调用。常见的JS模块导出方式包括:ES6模块、CommonJS模块和AMD模块等。以下是关于如何通过ES6模块进行导出的实现攻略: 使用export关键字将模块中定义的内容导出,导出内容可以是变量、函数、类等; 如果需要导出多个变量或函数,…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部