51Nod 1138 連續整數的和

2021-08-01 23:09:28 字數 665 閱讀 7891

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

=a+.

..+(

a+k)

,那麼n=

a∗k+

k∗(k

−1)2

a和k都是未知,假如我們遍歷a,k最小是2,那麼a的遍歷範圍為(1<=a<=10^8),假設我們遍歷k,由

n>k∗

(k−1

)2得k

,也就是k的遍歷範圍為(2<=k<=10^4.5)。

所以,我們從2開始遍歷k,當n−

k∗(k

−1)2

是k的倍數時,a的值是乙個解。

#include 

#include

using

namespace

std;

int ans[100000];

int main()

if (!k) cout

<<"no solution"

for (int i=k-1;i>=0;i--) cout

0;}

51nod 1138 連續整數的和

給出乙個正整數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個數,如果有多個按照遞增序...

51nod 1138 連續整數的和

萌新第一次發文 進入正題啦.此題最容易想到的就是利用等差數列的通項公式sum n a1 an 2 n a1 a1 n 1 2,此時公差d為1。將次方程做一些變換,a1 sum 1 2 n 2 n n,從n 2開始遍歷,所找到的a1即為解。這裡的難點是遍歷n的範圍,因為a1 1,所以a1 ai n 1...

51Nod 1138 連續整數的和

題目 給出乙個正整數n,將n寫為若干個連續數字和的形式 長度 2 例如n 15,可以寫為1 2 3 4 5,也可以寫為4 5 6,或7 8。如果不能寫為若干個連續整數的和,則輸出no solution。輸入 輸入1個數n 3 n 10 9 輸出 輸出連續整數中的第1個數,如果有多個按照遞增序排列,如...