https://leetcode.cn/problems/divisible-and-non-divisible-sums-difference/submissions/521201434/
給你兩個正整數 n 和 m 。
現定義兩個整數 num1 和 num2 ,如下所示:
num1:範圍 [1, n] 內所有 無法被 m 整除 的整數之和。
num2:範圍 [1, n] 內所有 能夠被 m 整除 的整數之和。
返回整數 num1 - num2 。
示例 1:
輸入:n = 10, m = 3
輸出:19
解釋:在這個示例中:
- 範圍 [1, 10] 內無法被 3 整除的整數爲 [1,2,4,5,7,8,10] ,num1 = 這些整數之和 = 37 。
- 範圍 [1, 10] 內能夠被 3 整除的整數爲 [3,6,9] ,num2 = 這些整數之和 = 18 。
返回 37 - 18 = 19 作爲答案。
示例 2:
輸入:n = 5, m = 6
輸出:15
解釋:在這個示例中:
- 範圍 [1, 5] 內無法被 6 整除的整數爲 [1,2,3,4,5] ,num1 = 這些整數之和 = 15 。
- 範圍 [1, 5] 內能夠被 6 整除的整數爲 [] ,num2 = 這些整數之和 = 0 。
返回 15 - 0 = 15 作爲答案。
示例 3:
輸入:n = 5, m = 1
輸出:-15
解釋:在這個示例中:
- 範圍 [1, 5] 內無法被 1 整除的整數爲 [] ,num1 = 這些整數之和 = 0 。
- 範圍 [1, 5] 內能夠被 1 整除的整數爲 [1,2,3,4,5] ,num2 = 這些整數之和 = 15 。
返回 0 - 15 = -15 作爲答案。
提示:
1 <= n, m <= 1000
解答 使用等差數列求和公式
class Solution {
public:
int differenceOfSums(int n, int m) {
int sumv = (1 + n)*n / 2; //首項加末項 乘以項數除以2
int a = n / m; //n裏面包含幾個m
int mv = m * a + a * (a - 1) * m / 2; //等差求和公式
return (sumv - mv) - mv;
}
};