51nod 1138 等差數列公式

2021-08-07 03:19:18 字數 824 閱讀 6816

給出乙個正整數n,將n寫為若干個連續數字和的形式(長度 >= 2)。例如n = 15,可以寫為1 + 2 + 3 + 4 + 5,也可以寫為4 + 5 + 6,或7 + 8。如果不能寫為若干個連續整數的和,則輸出no solution。

input

輸入1個數n(3 <= n <= 10^9)。

output

輸出連續整數中的第1個數,如果有多個按照遞增序排列,如果不能分解為若干個連續整數的和,則輸出no solution。

input示例

15 output示例

1 4

7等差數列求和公式(a1+an)*n/2=sum 以及an=a1+(n-1)d的運用

從長度2開始列舉,列舉到sqrt(2*sum),因為

當a1=1時,求得 n+n*(n-1)==2*sum.這時n的長度是最大的

n近似等於sqrt(sum*2)

#include 

// a1n+n*(n-1)/2=sum;

//a1=(sum-n*(n-1)/2)n;

// a1=1,求得 n+n*(n-1)==2*sum.這時n的長度是最大的

//因此只需要遍歷n[2,sqrt(sum*2)

using

namespace

std;

typedef

long

long ll;

vector

vec;

int main()}}

if(flag) cout

<<"no solution"

51nod 1138 數學 等差數列

思路 很顯然每個連續的序列都是等差數列,那麼我們利用等差數列求和公式。s a1 a1 k 1 k 2 2 a1 k 1 k 2 a1是首項,k是個數。列舉k,首項最小為1,k最大,具體不說了,反正大致就是sqrt 2 n 列舉量還是在平方以內 題外話 這題就是沒有去想等差數列,等差數列公式和求和要熟...

51nod 1138 數學 等差數列

思路 很顯然每個連續的序列都是等差數列,那麼我們利用等差數列求和公式。s a1 a1 k 1 k 2 2 a1 k 1 k 2 a1是首項,k是個數。列舉k,首項最小為1,k最大,具體不說了,反正大致就是sqrt 2 n 列舉量還是在平方以內 題外話 這題就是沒有去想等差數列,等差數列公式和求和要熟...

51nod 1138 連續整數的和(等差數列)

基準時間限制 1 秒 空間限制 131072 kb 分值 10 難度 2級演算法題 給出乙個正整數n,將n寫為若干個連續數字和的形式 長度 2 例如n 15,可以寫為1 2 3 4 5,也可以寫為4 5 6,或7 8。如果不能寫為若干個連續整數的和,則輸出no solution。input 輸入1個...