题目链接
英文链接:https://leetcode.com/problems/consecutive-numbers-sum/
中文链接:https://leetcode-cn.com/problems/consecutive-numbers-sum/
题目详述
给定一个正整数 N,试求有多少组连续正整数满足所有数字之和为 N?
示例 1:
1 | 输入: 5 |
示例 2:
1 | 输入: 9 |
示例 3:
1 | 输入: 15 |
说明: 1 <= N <= 10 ^ 9
题目详解
- 实际上就是求公差为 1 的等差数列各个元素之和为 N 的数列有多少个。
- 设首项为 a,有 b 项,则和为 (a + a + b - 1) b / 2。(a + a + b - 1) b / 2 = N 等价于 a = (2 * N / b - (b - 1)) / 2。要使条件满足,则要满足以下要求:
- 1.所有除法都是整除。这意味着 b 是 2N 的约数,2 能整除 2 N / b - (b - 1)。
- 2.a > 0。这意味着 2 N > b (b - 1)。
- 统计满足上述条件的数列有多少个即可。
1 | public class LeetCode_00829 { |
- 我们也可以运用等差数列的另一个求和公式,设首项为 a,有 k 项,则和为 k a + k (k - 1) / 2。
- 同理,求满足 k a + k (k - 1) / 2 = N 的数列有多少个即可。
1 | public class LeetCode_00829 { |