欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

力扣829. 连续整数求和(数学推导)

程序员文章站 2022-07-07 15:39:22
...

力扣829. 连续整数求和(数学推导)

力扣829. 连续整数求和(数学推导)

数学推导

符合要求的连续的正数长度为i,且起始值为start,那么有力扣829. 连续整数求和(数学推导)

因此我们可以枚举i,易证明i的范围不超过sqrt(2N),因为力扣829. 连续整数求和(数学推导),即力扣829. 连续整数求和(数学推导)

  • 首先判断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;
}