力扣829. 连续整数求和(数学推导)
程序员文章站
2022-07-07 15:39:22
...
力扣829. 连续整数求和(数学推导)
数学推导
符合要求的连续的正数长度为i,且起始值为start,那么有
因此我们可以枚举i,易证明i的范围不超过sqrt(2N),因为,即
-
首先判断2*N能否被i整除,能的话说明(start+start+i-1)是正整数
-
则再判断(2*N/i-i+1)能否被2整除,能的话说明start是正整数
//
// main.cpp
// huawei1
//
// Created by MXQ on 2020/10/23.
//
#include <iostream>
#include "vector"
using namespace std;
class Solution {
public:
int consecutiveNumbersSum(int N) {
int ans = 1;
int num = 2*N;
int limit = sqrt(num);
for(int i = 2;i<=limit;i++){
if(num%i==0){
int val = num/i;
val-=i-1;
if(val%2==0)
ans++;
for (int j=0; j<i; j++) {
cout<<val/2+j<<" ";
}
cout<<endl;
}
}
return ans;
}
};
int main(int argc, const char * argv[]) {
// insert code here...
Solution s;
auto result=s.consecutiveNumbersSum(15);
std::cout << result<<endl;
std::cout << "Hello, World!\n";
return 0;
}
上一篇: pyhton socket通信(TCP和UDP通信)(一)
下一篇: 美图秀秀怎么添加使用本地字体?