给定一个正整数 N
,试求有多少组连续正整数满足所有数字之和为 N
?
示例 1:
输入: 5 输出: 2 解释: 5 = 5 = 2 + 3,共有两组连续整数([5],[2,3])求和后为 5。
示例 2:
输入: 9 输出: 3 解释: 9 = 9 = 4 + 5 = 2 + 3 + 4
示例 3:
输入: 15 输出: 4 解释: 15 = 15 = 8 + 7 = 4 + 5 + 6 = 1 + 2 + 3 + 4 + 5
说明: 1 <= N <= 10 ^ 9
思路:连续整数也就是说是一个间距为1的递增序列;
设这个递增序列最大值n2,最小值n1;
这里i为N的因子,也是所求连续整数数组的大小,i的极值就是;
class Solution {
public:
int consecutiveNumbersSum(int N)
{
if (N<=2)
{
return 1;
}
int ans = 1, mid = 0;
for (int i = 2; sqrt(2*N)/i>1; i++)
{
int n2 = (i + 2 * N / i - 1) / 2;
int n1 = 2 * N / i - n2;
if ((n1 + n2)*(n2 - n1 + 1) == 2 * N)
ans++;
}
return ans;
}
};