GuilinDev

Lc0829

05 August 2008

829. Consecutive Numbers Sum

给一个正整数,判断最多可以由多少个连续的正整数相加而成

假设 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;
    }
}