正整數中有些數字是可以由連續的自然數相加而得,比如
1+2=3
4+5=9
2+3+4=9
這裡再列出它的三個問題:
1、 寫乙個程式,對於任意64位正整數,輸出它所有可能的連續自然數之和的算式?
2、 怎麼樣的數字是不能由連續的自然數相加而得,並且證明?
3、 64位正整數範圍內子串行數目最多的數是哪乙個?能否用數學知識推導出?(未做出)
我的分析:
1、 列舉並歸納分析
首先我羅列了1~20以內所有正整數的一些累加可能。
1 不可能
2 不可能
3=1+2
4不可能
5=2+3
6=1+2+3
7=3+4
8不可能
9=4+5
10=1+2+3+4
11=5+6
12=3+4+5
13=6+7
14=2+3+4+5
15=1+2+3+4+5
16 不可能
17=8+9
18=3+4+5+6
19=8+9
20=2+3+4+5+6
以上羅列僅僅是羅列了那些可能數字的一組組和方式(比如15有7+8、4+5+6、1+2+3+4+5三種,這裡就只舉例一種)。
結論:我發現唯一那些不可能自然數累加的正整數(1、2、4、8、16)之間的關係是他們均是2的n次方。
1=2^0、2=2^1、4=2^2、8=2^3、16=2^4
所以對於第二個問題,這個結論就是我提出的假設性答案(之後會證明)
2、 拆分數字得出公式
假如有乙個正整數n,並且它是可由連續的自然數相加而得。得
n=a1+a2+a3+… …+an (a1、a2、a3…an 均為連續自然數)
然而a1、a2、a3…an又可以拆分成如下形式:
a1=1+k
a2=2+k
a3=3+k
… …an=n+k
n為正整數、k為正整數或0
則n變成了如下形式
n=((1+k)+(2+k)+(3+k)+… …+(n+k))=(1+2+3+… … +n)+k*n=1/2*(1+n)n+kn=f(n,k)
也就是說,對於任意乙個連續自然數相加的數字都可以由函式f(n, k)求得。
(以上隱含的條件是n=1時是不成立的。因為n代表連續自然數相加的個數,n為1時無意義。)
(注:其實一種更好的推導方法是根據等差數列求和公式來推導。我不用等差數列求導是因為我這個方法個人認為更容易以程式設計的方式求出。最後會給出具體實現**。)
3、 證明公式與我的假設性答案的關係
假設函式f等於2^m(為了不混淆等式兩邊的n,2的次方我用m表示)
f(n, k)=1/2*(1+n)n+kn=2^m
(1+n)n+2kn=2^(m+1)
n((2k+1)+n)= 2^(m+1)
等式左邊n((2k+1)+n)無論n,k取什麼數字,n((2k+1)+n)的結果必然是奇數×偶數=偶數,而偶數又不能推導一定不等於2的n次方。不過這個結論(奇數×偶數)很重要。待我繼續證明。
假設n((2k+1)+n)=z。
因為z是偶數,必定可以拆分成z=2×z1,如果z1是偶數,必定有可以拆分成z1=2×z2,以此類推必定可以推出z(n-1)=2×zn,則z=2×2×… …×zn=2^n×zn
這裡的zn代表是不可除2的乙個奇數。
如果這個奇數可以被拆成兩個數字相乘,則必然得出的還是兩個奇數(o1, o2)。o1和o2中有至少乙個還能繼續拆分成兩個奇數相乘,則還是得出奇數o3,o4。以此類推,最終不可能被拆分的奇數只可能是質數。也就是說,前面證明的結論zn等於一組質數和2的n次方相乘而得。如果這組質數的元素個數為0,我們假設則該乘積為1。
至此,我得出了乙個比較有趣的推論:
對於連續自然數相加函式f(n, k),必然可以得出一組連續質數相乘(pn1×pn2×pn3×… …pnx)×2^n=2^(m+1)
(pn1×pn2×pn3×… …pnx)=2^(m+1-n) (m+1>=n)
也就是說,當且僅當這組質數個數為0個,乘積為1且n=m+1時,連續自然數相加的和等於2的n次方。
但是根據函式公式,連續自然數相加必然是由奇數×偶數的乘積,而且至少乙個非1的奇數存在。如果奇數為1,那麼函式得出的值只可能是1,而1顯然不符合題意。題意中的數字至少是從3開始,3是最小的連續自然數相加的數。
所以,連續自然數相加得出的函式f(n, k)必然不等於2的n次方。
連續自然數和
題目描述 對乙個給定的自然數m,求出所有的連續的自然數段,這些連續的自然數段中的全部數之和為m。例子 1998 1999 2000 2001 2002 10000,所以從1998到2002的乙個自然數段為m 10000的乙個解。輸入輸出格式 輸入格式 包含乙個整數的單獨一行給出m的值 10 m 2,...
連續自然數和
題目描述 描述 description 對乙個給定的自然數m,求出所有的連續的自然數段 連續個數大於1 這些連續的自然數段中的全部數之和為m。例子 1998 1999 2000 2001 2002 10000,所以從1998到2002的乙個自然數段為m 10000的乙個解。輸入輸入格式 input ...
自然數M拆分為連續自然數之和
有些數可以寫成連續n 1 個自然數之和,比如14 2 3 4 5 有些不能,比如8.那麼如何判斷乙個數是否可以寫成連續n個自然數之和呢?這是這一節的基本問題。乙個數m若可以寫成以a開頭的連續n個自然數之和,則m a a 1 a 2 a n 1 n a n n 1 2,要求a 0,否則就是以a 1開頭...