内卷地狱

2894. Divisible and Non-divisible Sums Difference

Edit Me

2894. Divisible and Non-divisible Sums Difference

Approach

Problem statement:
In [1,n][1, n], find the difference between the sum of all numbers not divisible by mm and the sum of all numbers divisible by mm.

Derivation:

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

  2. Numbers divisible by 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. Sum of non-divisible numbers:
    Snot_div=StotalSdivisibleS_{\text{not\_div}} = S_{\text{total}} - S_{\text{divisible}}

  4. The required answer:
    difference=Snot_divSdivisible\text{difference} = S_{\text{not\_div}} - S_{\text{divisible}}
    =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