30-seconds-of-code学习笔记(2

arrayGcd

求最大公约数

const arrayGcd = arr =>{
                    const gcd = (x, y) => !y ? x : gcd(y, x % y);
                    return arr.reduce((a,b) => gcd(a,b));
}
// arrayGcd([1,2,3,4,5]) -> 1
// arrayGcd([4,8,12]) -> 4

常见面试题 上面用的辗转相除法,即相互取余,知道最后一方为0,取另一方。

麻烦点的写法

var arrayGcd = function(arr) {
    function gcd(x, y) {
        return !y ? x : gcd(y, x % y)
    }
    var result = arr[0];
    for(var i = 0, length = arr.length; i < length; i++) {
        result = gcd(result, arr[i])
    }
    return result
}

还有一种方法叫做更相减损法 先两边共同把公约数2除完,然后相减与最小数比较 知道相等 在算出最先出来的2余其乘积

var arrayGcd = function(arr) {
    function gcd(x, y, z = 0) {
        if(!(x % 2 || y % 2)) {
            return gcd(x/2, y/2, z+1)
        }
        return x === y ? x*Math.pow(2, z) : gcd(Math.min(x, y), Math.abs(x - y), z)
    }
    var result = arr[0];
    for(var i = 0, length = arr.length; i < length; i++) {
        result = gcd(result, arr[i])
    }
    return result
}

我们试着让他简化一点

const arrayGcd = (arr) => {
    const gcd = (x, y, z = 1) => x === y ? x * z : x % 2 || y % 2 ? gcd(Math.min(x, y), Math.abs(x - y), z) : gcd(x/2, y/2, z*2)
    return arr.reduce((a,b) => gcd(a,b));
}

嗯··· 还是有点长····

arrayLcm

最小公倍数
应用定理 最大公约数 * 最小公倍数 = 两数乘积

所以

const arrayLcm = arr =>{
                    const gcd = (x, y) => !y ? x : gcd(y, x % y);
                    const lcm = (x, y) => (x*y)/gcd(x, y); 
                    return arr.reduce((a,b) => lcm(a,b));
}

这个就简单了

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一章数和数的运算 一概念 (一)整数 1整数的意义 自然数和0都是整数。 2自然数 我们在数物体的时候,用来表示...
    meychang阅读 7,662评论 0 5
  • 小升初的过程中,竞赛成绩能起到相当大的作用,谈到竞赛就离不开奥数。以下是小学奥数题知识点大汇总: 1.和差倍问题 ...
    沪江中小幼阅读 4,831评论 0 7
  • 新年第一天开篇,贴上新年目计划与目标,在此记录个人的成长及亲子教育的感悟记录。
    爱毅爱子阅读 1,441评论 0 0
  • 屢次—— 九層龍骨剖開經幡命裡的層次 像紅色的火苗暗搓自己寬厚的手掌 依然明朗、高昂 經幡是從不善良或者黑暗的木 ...
    鐵鉦阅读 2,875评论 15 19
  • 1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起 2.针对接口编程,而不是针对实...
    freezml阅读 1,378评论 0 0

友情链接更多精彩内容