class Solution {
public:
int consecutiveNumbersSum(int n) {
int ans=0;
for(int k=1;n-(k-1)*k/2>0;k++){
if((n-(k-1)*k/2)%k==0)ans++;
}
return ans;
}
};
class Solution {
public:
int consecutiveNumbersSum(int N) {
int res = 1;
for (int i = 2; i < sqrt(2 * N); ++i) {
if ((N - i * (i - 1) / 2) % i == 0) ++res;
}
return res;
}
};
利用N=(x+1)+(x+2)+⋯+(x+k) = kx+k*(k+1)/2 ,
减去1累加到k的和后能被k整除,即得到了一组x,k; 再将公式转换为2N=k(2x+k+1) 可以得出k < 根号下2N,减少时间复杂度