具体思想:
szy太强了;
先确定范围,从2~len开始枚举长度;
len,是从1,…,n,的最大长度,可以约等于为 N \sqrt{N} N;
这是,szy大佬提供了一个思路,不如用前缀和,如果项数为len,起始元素为a;
则满足 a ∗ l e n + ( 1 + . . . . + l e n ) = n a*len+(1+....+len)=n a∗len+(1+....+len)=n;
判断a是否为整数存在就行;
具体代码:
class Solution {
public:
int consecutiveNumbersSum(int n) {
int N=sqrt(2*n)+1;
int cnt=1;
for(int i=2;i<N;i++){
double temp=(double(i)/2)*double(1+i);
int sum=temp;
if((n-sum)%i==0)
cnt++;
}
return cnt;
}
};
/*
6=1+2+3
15=8+7=4+5+6=1+2+3+4+5
15=7+8=
*/