證明所有乘積的總和與分拆的方式無關

2021-06-20 20:40:22 字數 1814 閱讀 8751

有 1000 枚硬幣堆在一起。把它們任意分成兩堆,並計算出這兩堆的硬幣數的乘積。然後,任意選擇其中的一堆硬幣,把它繼續分成兩個更小的堆,並計算出這兩堆的硬幣數的乘積。不斷這樣做下去,直到最後每堆都只剩一枚硬幣為止。求證:把途中產生的所有乘積全部加在一起,結果是乙個定值,它不隨分法的改變而改變。

這是乙個非常經典的問題。讓我們把 1000 枚硬幣換成 n 枚硬幣,這樣的話問題反而會更容易一些。如果初始時有 n 枚硬幣,把它們分到底後,產生的所有乘積之和是多少呢?考慮一種特殊的分法:把 n 分成 1 和 n - 1 兩堆,再把 n - 1 分成 1 和 n - 2 兩堆……顯然,由此得到的總和應該是 (n - 1) + (n - 2) + ... + 2 + 1 = n(n - 1) / 2 。有了這個公式後,我們便很容易用數學歸納法證明,不管分法是什麼,最終的結果一定是 n(n - 1) / 2 。首先驗證,當 n = 1 時, n(n - 1) / 2 = 0 ,這是符合實際情況的:單獨一枚硬幣不會產生任何新的乘積。對於一般的 n ,把它分成 x 和 n - x 兩堆,得到乘積 x(n - x) 。由歸納假設,這兩堆硬幣今後將各產生總和為 x(x - 1) / 2 的乘積,以及總和為 (n - x)(n - x - 1) / 2 的乘積。不難算出,x(n - x) + x(x - 1) / 2 + (n - x)(n - x - 1) / 2 正是 n(n - 1) / 2 。

其實,這個問題有乙個異常帥的秒殺方法。每次把一堆硬幣分成兩堆後,計算兩堆硬幣數量的乘積,實際上相當於是在計算有多少對硬幣在這一步被分開了。最後所有乘積的總和,也就是在整個過程中被分開的硬幣對的總數。然而, n 枚硬幣之間共有 c(n, 2) = n(n - 1) / 2 個硬幣對,所有的硬幣對最終都被分開了,因而問題的答案就是 n(n - 1) / 2 ,這不隨分法的變化而變化。

現在,讓我們把問題變一下。假設有一根長度為 n 的線段。把它分成兩條子線段,並計算這兩條子線段的長度的乘積。選擇其中一條子線段,並把它繼續分成兩條更小的子線段,求出這兩條子線段的長度的乘積。不斷這樣細分下去,直到所有的子線段長度都趨於 0 。在此過程中,不斷累加所得的乘積,其總和的極限是多少?(注意,這裡的描述還需要更嚴謹一些,不過我們暫不追究。)

顯然,答案應該是乙個比 n(n - 1) / 2 更大的數。因為根據前乙個問題的解答,把長度為 n 的線段分成 n 個長度為 1 的線段,乘積的總和為 n(n - 1) / 2 ;但在此之後,我們還可以繼續切分線段,讓總和繼續增加。那麼,答案究竟是多少呢?我們也可以借助某個特殊的分法得出答案。假設我們按照如下方法把線段無窮細分:先把整條線段等分成兩段,得到乘積 (n / 2)^2 ;再把所得的兩條子線段都進行平分,得到兩個 (n / 4)^2 ;再依次平分當前的四條子線段,得到四個 (n / 8)^2 ……以此類推,最後的總和將會是 (n / 2)^2 + 2 · (n / 4)^2 + 4 · (n / 8)^2 + 8 · (n / 16)^2 + ... = n^2 / 4 + n^2 / 8 + n^2 / 16 + n^2 / 32 + ... = n^2 / 2 。

不過,我們如何證明,任意一種分法都會導致總和最終會趨於 n^2 / 2 ?公升級版的問題變得不再離散,數學歸納法和組合方法似乎都派不上用場了。其實,借助幾何構造,這個問題也有乙個非常直觀的秒殺方法。

如圖,初始時線段的總長為 n ,那麼我們就作乙個邊長為 n 的等腰直角三角形。如果把線段分成了 x 和 y 兩段,由此產生的乘積 x · y 就對應於左圖的等腰直角三角形中陰影矩形的面積。繼續細分兩個子線段,也就相當於遞迴地處理兩個剩餘的空白三角形。當所有子線段都被分到無窮短時,矩形面積的總和將會無窮接近於整個等腰直角三角形的總面積,也就是 n^2 / 2 。

找出所有路徑跨越的總和

解題思路 1 將輸入的路徑按照起點值的大小排序 如測試用例1中排序完後應該是 1 2 4 7 5 8 2 依次計算每段路徑的長度,且要判斷是否與前面的路徑發生重疊,如果發生重疊,則以當前路徑的終點減去上一段路徑的終點 如果沒有重疊時,則以當前路徑的終點減去當前路徑的起點 即以當前路徑的終點減去二者之...

獲取字串中所有漢字的筆畫總和

如題,以備查。using system using system.collections.generic using system.linq using system.text using system.text.regularexpressions namespace chinese return...

素數的形成與無窮素數的證明

素數是一種很有意思的數,原因在於他只有1與本身兩個因數,那麼素數的個數是否是無窮個是乙個有趣的問題。素數的個數為什麼是無窮個,假設素數是有窮個,那麼有窮個素數的乘積加1,也就是x p0 p1 pn 1,如果x是個素數,那麼也就意味著由已知的素數還可以再形成素數,那麼如果它不是素數也就是說x還有除了現...