LeetCode 829. 连续整数求和

LeetCode 829. 连续整数求和_第1张图片

一开始我想的是质因数分解,然后项数 为奇数的好解决但是偶数弄不了

然后看题解发现了你直接写出通项公式:

假设首项是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

你可能感兴趣的:(思维,数论,c++,算法,学习,数据结构,leetcode,职场和发展)