一开始我想的是质因数分解,然后项数 为奇数的好解决但是偶数弄不了
然后看题解发现了你直接写出通项公式:
假设首项是a,项数为k
则 (a+k-1+a)*k = 2*n
看看k 的范围
2*a = 2n/k +1-k>=2
2*n/k >=k+1
2n>k*k
所以可以暴力枚举k sqrt(2*n)
然后看看k,a合法的话就累加到答案就好了
class Solution {
public:
int consecutiveNumbersSum(int n) {
int ans = 0;
n*=2;
for(int k=1;k*k<n;k++){
if(n%k)continue;
if((n/k+1-k)%2)continue;
ans++;
}
return ans;
}
};