555. McCarthy 91 函式

黃志斌發表於2016-04-13

題目

Problem 555: McCarthy 91 function

The McCarthy 91 function is defined as follows:

We can generalize this definition by abstracting away the constants into new variables:

This way, we have .
Let be the set of fixed points of . That is,

For example, the only fixed point of is . In other words, .
Now, define as the sum of the elements in and let .

For example, and .
Find .

分析

的幾個典型值進行簡單計算後,我們發現, 對於正整數 , 當且僅當 時,
.
利用等差數列的求和公式,得到:
.
現在,我們令 ,再次利用等差數列的求和公式,得到:
.
最終,我們得到: .
注意,在這個和式中,a 不是自由變數,而是 p 和 b 的函式。而且這個和式也不是無限和,求和進行到 a = 0 為止。

解答

根據以上分析,我們有以下 Haskell 程式:

main = let p = 10^6; m = p in print $ (flip div 2) $ sum $
  takeWhile (>0) [(1+2*m-z)*z | b <- [1..], let z = b * (div p b - 1)]

簡要說明:

  • div p b - 1 就是上面的分析中提到的 a
  • z 就是 ab

這個程式的執行時間是 0.267 秒。

參考資料

  1. Wikipedia: McCarthy 91 function
  2. Wikipedia: Arithmetic progression

相關文章