p1147 連續自然數和
設一段自然數的首項為a1,末項為a2,則這段自然數之和為:
sum =(a1 + a2) * (a2 - a1 + 1) / 2 = m
即(a1 + a2) * (a2 - a1 + 1) = 2m
可以把2m分解成兩個數之積,假設分成了兩個數k1,k2,且k12 - a1 + 1 = k1
(2)a1 + a2 = k2
解得:a1 = ( k2 - k1 + 1 ) / 2 , a2 = ( k1 + k2 - 1 ) / 2
要保證a1和a2都為自然數,k2和k1必須是乙個奇數,乙個偶數
不過有一種特殊情況,就是a1 = a2的情況,這種情況是不允許的
即(k2-k1+1)/2 ≠ (k1+k2-1)/2,解得k1≠1
#include
#include
#include
#include
typedef
long
long ll;
using namespace std;
int m,k1,k2;
intmain()
}return0;
}
洛谷P1147 連續自然數和
連續自然數和 題目描述 對乙個給定的自然數m,求出所有的連續的自然數段,這些連續的自然數段中的全部數之和為m m 2000000 例子 1998 1999 2000 2001 2002 10000,所以從1998到2002的乙個自然數段為m 10000的乙個解。分析可以把連續自然數段看成乙個等差數列...
洛谷 P1147 連續自然數和
對乙個給定的自然數m,求出所有的連續的自然數段,這些連續的自然數段中的全部數之和為m。例子 1998 1999 2000 2001 2002 10000,所以從1998到2002的乙個自然數段為m 10000的乙個解。包含乙個整數的單獨一行給出m的值 10 m 2,000,000 每行兩個自然數,給...
洛谷 P1147 連續自然數和
前言 只為轉c 而寫個解題報告。題目描述 對乙個給定的自然數m,求出所有的連續的自然數段,這些連續的自然數段中的全部數之和為m。例子 1998 1999 2000 2001 2002 10000,所以從1998到2002的乙個自然數段為m 10000的乙個解。輸入格式 包含乙個整數的單獨一行給出m的...