题目:829. 连续整数求和
题意:
给定一个正整数 n,返回 连续正整数满足所有数字之和为 n 的组数 。
题解:
连续就想到了等差为1的等差数列,所以有公式 m a 1 + ( m − 1 ) m / 2 = m ( m a 1 + ( m − 1 ) / 2 ) = n ma_1+(m-1)m/2=m(ma_1+(m-1)/2) = n ma1+(m−1)m/2=m(ma1+(m−1)/2)=n,可以看出m必须是n的银子,并且m-1为偶数才可以,才能确保 a 1 a_1 a1为整数。
代码:
class Solution {
public:
int consecutiveNumbersSum(int n) {
int half = sqrt(n);
int cn = 0;
for(int i = 1; i <= half; i++){
if(i == half && i*i == n){
if((i-1)%2 == 0)cn++;
}
else{
if(n % i == 0){
if((i -1)%2 == 0)cn++;
int other = n / i;
if((other-1)%2 == 0)cn++;
}
}
}
return cn;
}
};