51nod 1138 連續整數的和 好題

2021-09-19 05:49:55 字數 1028 閱讀 9541

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

收起

輸入1個數n(3 <= n <= 10^9)。
輸出連續整數中的第1個數,如果有多個按照遞增序排列,如果不能分解為若干個連續整數的和,則輸出no solution。
15
1

47

分析:

假設[a,a+k-1]滿足和=n

a,a+1, a+2,……a+k-1

k*a+k*(k-1)/2=n

k^2+(2*a-1)k-2n=0

這題一開始想的暴力列舉a,

k=【(1-2a)+(long long)(2*a-1)*(long long)(2*a-1)+8*n】/2

果斷的t了

這題需要轉化一下啊思想

列舉kk^2+k=2n

取a=1,k可以取到最大不超過sqrt(2*n)

即k的取值範圍(2,sqrt(2*n))

超時**

#include#include#include#includeusing namespace std;

int main()

}} if(flag==1)

printf("no solution\n");

} return 0;

}

ac**

#include#include#include#includeusing namespace std;

int main()

} if(flag==1)

printf("no solution\n");

return 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 連續整數的和

給出乙個正整數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...

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...