【算法】求1000以内3的倍数或5的倍数之和


解法一:

function sumOfMultiples(num) {
    // Implement your solution here
    let sum = 0;
    for(let i=1; i<num; i++){
        if(i%3 == 0 || i%5 == 0){
            sum += i
        }
    }
    return sum
}

sumOfMultiples(1000) 'console.log(233168)'

解法二:

通过查询相关文章发现一例巧妙运用数学等差数列完成的解法。在此记录一下。

function sumOfMultiples(num){
    function sum(n){
       return n * (n+1) / 2
    }
    return sum(Math.floor((input - 1 ) / 3)) * 3 + sum(Math.floor((input - 1 ) / 5)) * 5 - sum(Math.floor((input - 1 ) / 15)) * 15
}

相关思路:
一个公差为的等差数列前项的级数为:
2016021816585170.png
第二种方法第一步就用了(a1+an)/33,所以就变成了3(1+333)*333/2,这一步就是把整除3的所有项都加起来。
同理,sum(Math.floor(input-1)/5))*5中,就把1000以内中能整除5的所有项都加起来最后能整除3和整除5里面有重复的数,比如15,这时就把重复除以15的数减掉,就能获得1000以内能被3或5整除的数字之和。

解法三:

function sum(value) {
    var newArr = [];
    for (var i = 0; i < value; i++) {
        if (i % 3 === 0 || i % 5 === 0) {
            newArr.push(i);
        }
    }
    console.log(newArr);
    return newArr.reduce((a, b)=>{
        return a + b
    });
}
sum(1000); 'console.log(233168)'

声明:麋鹿与鲸鱼|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 【算法】求1000以内3的倍数或5的倍数之和


Carpe Diem and Do what I like