内卷地狱

2894. 分类求和并作差

Edit Me

2894. 分类求和并作差

Thought

题意:
[1,n][1, n] 中,求所有不能被 mm 整除的数的总和与能被整除的数的总和之差。

思路推导:

  1. 总和:
    Stotal=i=1ni=n(n+1)2S_{\text{total}} = \sum_{i=1}^{n} i = \frac{n(n+1)}{2}

  2. 能被 mm 整除的数为:m,2m,3m,,nmmm, 2m, 3m, \dots, \left\lfloor \frac{n}{m} \right\rfloor m Sdivisible=m(1+2++k)=mk(k+1)2S_{\text{divisible}} = m \cdot \left(1 + 2 + \dots + k\right) = m \cdot \frac{k(k+1)}{2}

  3. 所以不能被整除的和为:
    Snot_div=StotalSdivisibleS_{\text{not\_div}} = S_{\text{total}} - S_{\text{divisible}}

  4. 所求答案为:
    差值=Snot_divSdivisible\text{差值} = S_{\text{not\_div}} - S_{\text{divisible}}
    =n(n+1)2mnm(nm+1)2mnm(nm+1)2= \frac{n(n+1)}{2} - m \cdot \frac{\left\lfloor \frac{n}{m} \right\rfloor(\left\lfloor \frac{n}{m} \right\rfloor+1)}{2} - m \cdot \frac{\left\lfloor \frac{n}{m} \right\rfloor(\left\lfloor \frac{n}{m} \right\rfloor+1)}{2}
    =n(n+1)2mnm(nm+1)= \frac{n(n+1)}{2} - m \cdot \left\lfloor \frac{n}{m} \right\rfloor(\left\lfloor \frac{n}{m} \right\rfloor+1)

Code

class Solution:
    def differenceOfSums(self, n: int, m: int) -> int:
        # divisible = m * (1 + n // m) * (n // m) // 2
        # undivisible = n * (n + 1) // 2 - n * ((1 + n // m) * (n // m) // 2)
        return - m * ((1 + n // m) * (n // m)) + (n * (n + 1) >> 1)
const differenceOfSums = (n: number, m: number): number =>
  -m * ((1 + Math.floor(n / m)) * Math.floor(n / m)) + ((n * (n + 1)) >> 1);

贡献者


这篇文章有帮助吗?

最近更新

Involution Hell© 2026 byCommunityunderCC BY-NC-SA 4.0CCBYNCSA

On this page