-
总和:
Stotal=∑i=1ni=2n(n+1)
-
能被 m 整除的数为:m,2m,3m,…,⌊mn⌋m
Sdivisible=m⋅(1+2+⋯+k)=m⋅2k(k+1)
-
所以不能被整除的和为:
Snot_div=Stotal−Sdivisible
-
所求答案为:
差值=Snot_div−Sdivisible
=2n(n+1)−m⋅2⌊mn⌋(⌊mn⌋+1)−m⋅2⌊mn⌋(⌊mn⌋+1)
=2n(n+1)−m⋅⌊mn⌋(⌊mn⌋+1)
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);