javascript获取最小数据(javascript来计算最大公约数和最小公倍数)

最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法与最大公约数相对应的概念是最小公倍数,a,b的最小公倍数记为[a,b],我来为大家科普一下关于javascript获取最小数据?以下内容希望对你有帮助!

javascript获取最小数据(javascript来计算最大公约数和最小公倍数)

javascript获取最小数据

最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号。求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。与最大公约数相对应的概念是最小公倍数,a,b的最小公倍数记为[a,b]。

以上为概念,为什么讲这个问题呢?请看这里...https://www.codewars.com/kata/54d7660d2daf68c619000d95/train/javascript

下面只说几个常用的实现思路:

  • 通过程序轮询获得最大公约数(在不知道算法的情况下...)
  • 辗转相除法(欧几里得算法)
  • 辗转相减法(更相减损法)
普通轮询

function gcd(a,b){ var div = 1,max = Math.max(a,b),min = Math.min(a,b); for(let i=1;i<min;i ){ if(max % i === 0 && min % i === 0){ div = i; } } return div; }

我们通过遍历最终获得一个最大的公约数。当然遍历顺序也可以反过来,这样步骤会相对少一部分的。

function gcd(a,b){ var div = 1,max = Math.max(a,b),min = Math.min(a,b); for(let i=min;i>=1;i--){ if(max % i === 0 && min % i === 0){ div = i; break; } } return div; }

辗转相除法

function gcd(a,b){ if(b === 0)return a; return gcd(b,a % b); }

通过相除然后递归获得最终的最大公约数,当然也可以简写..

const gcd= (a, b) => b ? gcd(b, a % b) : a;

辗转相减法

function gcd(a,b){ var p = Math.abs(a - b ),min = Math.min(a,b); if(min % p === 0)return p; return gcd(min,p); }

以上三种方式可以通过js来获得两个数的最大公约数。当我们有了最大公约数后,就可以通过最大公约数获得两个数的最小公倍数。

[a,b] = a * b / (a,b) a 与 b的最小公倍数等于 a与b的乘积 除以 a与 b的最大公约数。

最小公倍数

const gcd = (a, b) => b ? gcd(b, a % b) : a;//获得ab 的最大公约数 const lcm = (a, b) => a * b / gcd(a, b);//获得ab的最小公倍数

顺便,这里再贴下关于这道题的解法:

const gcd = (a, b) => b ? gcd(b, a % b) : a; const lcm = (a, b) => a * b / gcd(a, b); function convertFrac(arr) { const cd = arr.reduce((a, [_, d]) => lcm(d, a), 1); return arr.map(([n, d]) => `(${n * cd/d},${cd})`).join(''); } //声明下,这个解法并不是我的。


以上为通过js来计算两个数的最大公约数和最小公倍数的实现方式

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页