【數學-算法】1加到100的有趣算法

今天備考軟件設計師,遇到個公式1+2+3+..+n=n(n+1)/2,居然一時卡殼無法證明。

我們先看看令高斯聞名世界的小學數學題,1+2+3+...+98+99+100=?

 

算法1: 逐個累加。

算法2:逐對的首尾相加: (1+100)+(2+99)+(3+98)+...+(50+51) ,總共有 50對101,就是50*101=5050。

算法3:創造出一個相反的計算式 100+99+98+...+3+2+1,它與1+2+3+...+99+100的結果是相同的,兩個式子一一對應相加,總共是100個101,就是100*101,然後再除2,就是100*101/2 = 5050。

 

這三個算法,顯然第三個更直觀更清晰。讓我感到驚奇的是它的創造性,它沒有直接去求解問題,而是創造性的提出一個新問題,然後利用這個多餘的新問題與題目之間的獨特關係,從而簡化了原問題的求解。不得不說,真的不是一般沒有受過數學訓練的人能想到的。

我們再用算法2和3去推導公式:1+2+3+..+n=n(n+1)/2。

 

算法2:

n爲偶數時,逐對進行首尾相加,剛好有n/2對,每對的和是n+1,二者相乘就是和:(n+1)n/2。

比如:1+2+3+4。

 

n爲奇數時,這時有2種方法。

方法1:先累加前n-1,即先計算:1+2+3+..+n-1,套用偶數的公式,結果前n-1項的和是 n(n-1)/2,然後再加上n,就是 n+n(n-1)/2 = n(n+1)/2。

方法2:逐對進行首尾相加,會有(n-1)/2對,每對的和是n+1,但中間剩下個單項,是 (n+1)/2,兩個部分加起來,就是:(n+1)(n-1)/2 + (n+1)/2 = (n+1)n/2。

比如:1+2+3+4+5。

 

算法3(清晰易懂):

要求1+2+3+...+(n-1)+n

構造n+(n-1)+...+3+2+1

二者上下對應相加,得到:

(n+1)+(n+1)+...+(n+1)+(n+1)+(n+1)

容易看出,是n個n+1相加,即 n*(n+1)

因構造的算式與要求的算式值相等,所以剛纔的結果除2,即 n(n+1)/2 爲最終結果。

看完算法3是不是感覺眼前一亮,非常清晰。

 

不得不感慨:數學真的是精妙!
 

 

寫於湖北省圖,2019.10.26

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章