Description
Given a positive integer n, find the sum of all integers in the range [1, n] inclusive that are divisible by 3, 5, or 7.
Return an integer denoting the sum of all numbers in the given range satisfying the constraint.
Example 1:
Input: n = 7 Output: 21 Explanation: Numbers in the range[1, 7]that are divisible by3,5,or7are3, 5, 6, 7. The sum of these numbers is21.
Example 2:
Input: n = 10 Output: 40 Explanation: Numbers in the range[1, 10] that aredivisible by3,5,or7are3, 5, 6, 7, 9, 10. The sum of these numbers is 40.
Example 3:
Input: n = 9 Output: 30 Explanation: Numbers in the range[1, 9]that are divisible by3,5, or7are3, 5, 6, 7, 9. The sum of these numbers is30.
Constraints:
1 <= n <= 103
Solutions
Solution 1: Enumeration
We directly enumerate every number x in [1,..n], and if x is divisible by 3, 5, and 7, we add x to the answer.
After the enumeration, we return the answer.
The time complexity is O(n), where n is the given integer. The space complexity is O(1).
class Solution: def sumOfMultiples(self, n: int) -> int: return sum(x for x in range(1, n + 1) if x % 3 == 0 or x % 5 == 0 or x % 7 == 0)(code-box)
Solution 2: Mathematics (Inclusion-Exclusion Principle)
We define a function f(x) to represent the sum of numbers in [1,..n] that are divisible by x. There are m = \left\lfloor n⁄x \right\rfloor numbers that are divisible by x, which are x, 2x, 3x, …, mx, forming an arithmetic sequence with the first term x, the last term mx, and the number of terms m. Therefore, f(x) = (x + mx) × m⁄2.
According to the inclusion-exclusion principle, we can obtain the answer as:
The time complexity is O(1), and the space complexity is O(1).
class Solution: def sumOfMultiples(self, n: int) -> int: def f(x: int) -> int: m = n // x return (x + m * x) * m // 2 return f(3) + f(5) + f(7) - f(3 * 5) - f(3 * 7) - f(5 * 7) + f(3 * 5 * 7)(code-box)
Solution 3
impl Solution { pub fn sum_of_multiples(n: i32) -> i32 { fn f(x: i32, n: i32) -> i32 { let m = n / x; ((x + m * x) * m) / 2 } f(3, n) + f(5, n) + f(7, n) - f(3 * 5, n) - f(3 * 7, n) - f(5 * 7, n) + f(3 * 5 * 7, n) } }(code-box)
