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