javascript来计算最大公约数和最小公倍数

javascript来计算最大公约数和最小公倍数

月光魔力鸭

2018-10-15 17:58 阅读 2915 喜欢 2 最大公约数 最小公倍数

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

以上为概念,为什么讲这个问题呢?请看这里...undefined

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

普通轮询

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的最小公倍数

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

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来计算两个数的最大公约数和最小公倍数的实现方式。

转载请注明出处: https://chrunlee.cn/article/js-common-denominators.html


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
在开发过程中经常会碰到跨frame 去操作的需求,那么如何获得这个frame呢,这里写了一个工具类,用来通过name获得frame的jq对象
最近一直在想着抓一些网盘数据,进行资料归拢,可是当我真正开始的时候.. 还是遇到了反爬,当然我本身就有心理预期,这是肯定会碰到的,只是没想到会在代理IP上耗费这么久,之前的时候也处理过代理IP ,可是由于一知半解,导致很多配置都不理解,debug全靠猜...
突然来了一个调研任务,想要实现一个类似3D虚拟展厅类似的需求,主要就是放一些学生的作品,然后预览啥的,效果还是要全景的效果。 经过一番调查,最终锁定了以前从未接触过的krpano。
错误:The operation is insecure . 在使用canvas的 toDataUrl的时候报错,看了很多资料,基本上都说是设置跨域,但是我一直都有的啊。其实,只是顺序错了,setAttribute('crossOrigin','Anonymous') 要在设置 src之前设置。
偶尔练习下canvas,这里简单记录下常用API,防止遗忘..加深记忆..努力提高..争取突破...daydayup
java 对象中有很多引用,甚至会出现循环引用,比如 user 对象中有 school 对象,school 对象中又有 user 对象,这样在对 user 对象序列化的时候,就会出现死循环,导致内存溢出。通过一定的方式,将每个对象增加ID 和 REF 引用标识最终可以解决这个问题
今天小程序上传体验版本后莫名无法获取用户数据,但是本地开发环境是正常的,通过开发工具的真机进行测试也正常,但是通过开发工具的预览又不正常,初步来看代码是没有问题的,可能是哪里设置有问题。
我们有时候会拿textarea来做编辑器,但是常用编辑器都是支持tab缩进的,这里对textarea监听下事件处理下即可实现。