Skip to content
目录

2652. 倍数求和

难度:简单

地址:https://leetcode.cn/problems/sum-multiples/description/

给你一个正整数 n ,请你计算在 [1, n] 范围内能被 357 整除的所有整数之和。

返回一个整数,用于表示给定范围内所有满足约束条件的数字之和。

示例 1:

:n = 7

:21

:在 [1, 7] 范围内能被 357 整除的所有整数分别是 3、5、6、7 。数字之和为 21

示例 2:

:n = 10

:40

:在 [1, 10] 范围内能被 357 整除的所有整数分别是 3、5、6、7、9、10 。数字之和为 40

示例 3:

:n = 9

:30

:在 [1, 9] 范围内能被 357 整除的所有整数分别是 3、5、6、7、9 。数字之和为 30

提示:

  • 1 <= n <= 10^3

题解:

方法一:枚举

js
/**
 * @param {number} n
 * @return {number}
 */
var sumOfMultiples = function (n) {
    let sum = 0;
    for (let i = 1; i <= n; i++) {
        if (i % 3 == 0 || i % 5 == 0 || i % 7 == 0) {
            sum += i;
        }
    }
    return sum;
};

方法二:容斥原理

js
var f = function (n, m) {
    return ((m + Math.floor(n / m) * m) * Math.floor(n / m)) / 2;
};
var sumOfMultiples = function (n) {
    return (
        f(n, 3) +
        f(n, 5) +
        f(n, 7) -
        f(n, 3 * 5) -
        f(n, 3 * 7) -
        f(n, 5 * 7) +
        f(n, 3 * 5 * 7)
    );
};