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 <= 103
解法
方法一:枚举
我们直接枚举 \([1,..n]\) 中的每一个数 \(x\),如果 \(x\) 能被 \(3\), \(5\), \(7\) 整除,那么就将 \(x\) 累加到答案中。
枚举结束后,返回答案即可。
时间复杂度 \(O(n)\),其中 \(n\) 为题目给定的整数。空间复杂度 \(O(1)\)。
1 2 3 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
方法二:数学(容斥原理)
我们定义函数 \(f(x)\) 表示 \([1,..n]\) 中能被 \(x\) 整除的数之和,那么一共有 \(m = \left\lfloor \frac{n}{x} \right\rfloor\) 个数能被 \(x\) 整除,这些数字分别为 \(x\), \(2x\), \(3x\), \(\cdots\), \(mx\),构成一个等差数列,首项为 \(x\),末项为 \(mx\),项数为 \(m\),因此 \(f(x) = \frac{(x + mx) \times m}{2}\)。
根据容斥原理,我们可以得到答案为:
\[
f(3) + f(5) + f(7) - f(3 \times 5) - f(3 \times 7) - f(5 \times 7) + f(3 \times 5 \times 7)
\]
时间复杂度 \(O(1)\),空间复杂度 \(O(1)\)。
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 |
|
方法三
1 2 3 4 5 6 7 8 9 10 |
|