Skip to content

Commit 7ab10c7

Browse files
committed
chore: add daily leetcode post 2894. 分类求和并作差
1 parent 4c197f3 commit 7ab10c7

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
---
2+
title: 2894. 分类求和并作差
3+
date: '2025.05.27 23:52'
4+
tags:
5+
- - Python
6+
- - answer
7+
- - typescript
8+
abbrlink: 66adcc9e
9+
---
10+
[2894. 分类求和并作差](https://leetcode.cn/problems/divisible-and-non-divisible-sums-difference/description/)
11+
12+
13+
# Thought
14+
15+
**题意:**
16+
在 $[1, n]$ 中,求所有不能被 $m$ 整除的数的总和与能被整除的数的总和之差。
17+
18+
**思路推导:**
19+
1. 总和:
20+
$S_{\text{total}} = \sum_{i=1}^{n} i = \frac{n(n+1)}{2}$
21+
22+
2. 能被 $m$ 整除的数为:$m, 2m, 3m, \dots, \left\lfloor \frac{n}{m} \right\rfloor m$
23+
$S_{\text{divisible}} = m \cdot \left(1 + 2 + \dots + k\right) = m \cdot \frac{k(k+1)}{2}$
24+
25+
3. 所以不能被整除的和为:
26+
$S_{\text{not\_div}} = S_{\text{total}} - S_{\text{divisible}}$
27+
28+
4. 所求答案为:
29+
$\text{差值} = S_{\text{not\_div}} - S_{\text{divisible}}$
30+
$= \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}$
31+
$= \frac{n(n+1)}{2} - m \cdot \left\lfloor \frac{n}{m} \right\rfloor(\left\lfloor \frac{n}{m} \right\rfloor+1)$
32+
33+
# Code
34+
```python
35+
class Solution:
36+
def differenceOfSums(self, n: int, m: int) -> int:
37+
# divisible = m * (1 + n // m) * (n // m) // 2
38+
# undivisible = n * (n + 1) // 2 - n * ((1 + n // m) * (n // m) // 2)
39+
return - m * ((1 + n // m) * (n // m)) + (n * (n + 1) >> 1)
40+
```
41+
42+
```typescript
43+
const differenceOfSums = (n: number, m: number): number => -m * ((1 + Math.floor(n / m)) * Math.floor(n / m)) + (n * (n + 1) >> 1);
44+
```

0 commit comments

Comments
 (0)