题目描述:
Given a positive integer N, how many ways can we write it as a sum of consecutive positive integers?
Example 1:
Input: 5
Output: 2
Explanation: 5 = 5 = 2 + 3
Example 2:
Input: 9
Output: 3
Explanation: 9 = 9 = 4 + 5 = 2 + 3 + 4
Example 3:
Input: 15
Output: 4
Explanation: 15 = 15 = 8 + 7 = 4 + 5 + 6 = 1 + 2 + 3 + 4 + 5
Note: 1 <= N <= 10 ^ 9.
class Solution {
public:
int consecutiveNumbersSum(int N) {
int result=0;
//假设连续数组为i~(i+l),那么长度为(l+1),和为i(l+1)+l(l+1)/2
//显然l的取值范围为[0,N],同时满足l(l+1)/2<N,遍历所有可能的l判断i是否存在
for(int l=0;l*(l+1)/2<N;l++)
if((N-l*(l+1)/2)%(l+1)==0) result++;
return result;
}
};