2894.分类求和并作差:数学O(1)一行解决
【LetMeFly】2894.分类求和并作差:数学O(1)一行解决
力扣题目链接:https://leetcode.cn/problems/divisible-and-non-divisible-sums-difference/
给你两个正整数 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
解题方法:数学
这就需要拿出我们小学二年级就学过的等差数列求和公式 $\lfloor\frac{(首项+尾项)\times 项数}{2}\rfloor$
另外有$num1-num2=(num1+num2)-num2$,而$num1+num2$就是整个数列$1$到$n$的和,$num2$就是首项为$m$尾项为$\lfloor\frac{n}m\rfloor\times m$项数为$\lfloor\frac{n}m\rfloor$的等差数列。
- 时间复杂度$O(1)$
- 空间复杂度$O(1)$
AC代码
C++
1 |
|
Python
1 |
|
Java
1 |
|
Go
1 |
|
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
千篇源码题解已开源
2894.分类求和并作差:数学O(1)一行解决
https://blog.letmefly.xyz/2025/05/27/LeetCode 2894.分类求和并作差/