2652. 倍数求和
难度:简单
给你一个正整数 n
,请你计算在 [1, n]
范围内能被 3
、5
、7
整除的所有整数之和。
返回一个整数,用于表示给定范围内所有满足约束条件的数字之和。
示例 1:
:n = 7
:21
:在
[1, 7]
范围内能被3
、5
、7
整除的所有整数分别是
3、5、6、7
。数字之和为21
。
示例 2:
:n = 10
:40
:在
[1, 10]
范围内能被3
、5
、7
整除的所有整数分别是
3、5、6、7、9、10
。数字之和为40
。
示例 3:
:n = 9
:30
:在
[1, 9]
范围内能被3
、5
、7
整除的所有整数分别是
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)
);
};