算法
(数学) O(n√)O(n)
对于一个正整数NN,如果能写成KK个连续正整数相加的形式,则有,
N=(x+1)+(x+2)+…+(x+K)
进行整理得到:
N=K∗x+(1+K)∗K/2
于是,N能够写成K个连续正整数相加的条件是,(N−K∗(K+1)2)(N−K∗(K+1)2)能够被KK整除
int consecutiveNumbersSum(int N) {
int result = 0;
for (int k = 1; k * (k + 1) <= 2 * N; k++) {
if ((N - k * (k + 1) / 2) % k == 0) result++;
}
return result; }