Leetcode 2894. 分類求和並作差

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;
    }
};

我的視頻題解空間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章