05 August 2008
给一个正整数,判断最多可以由多少个连续的正整数相加而成
假设 N=由区间 [a, a + k − 1] 累加得到 等差数列 首项为 a ,项数为 k
其中 a >= 1,k >= 1 且都为整数
N = (a + a + k - 1) * k / 2
-> a * k = N - ( k - 1) * k/2
-> (k - 1) * k / 2 < N && ( N - ( k - 1) * k / 2 ) 能被 k 整除
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public int consecutiveNumbersSum(int n) {
int count = 0;
for(int i = 1; (i - 1) * i / 2 < n; i++){
int tmp = n - (i - 1) * i / 2;
if(tmp % i == 0){
count++;
}
}
return count;
}
}