一开始我想的是质因数分解,然后项数 为奇数的好解决但是偶数弄不了
然后看题解发现了你直接写出通项公式:
假设首项是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;}
};