2010年8月11日 星期三

371 - Ackermann Functions

Ackermann function的特徵為:其所產生出來的數列長度無法由輸入值直接計算,一個整數的Ackermann function如下:

displaymath32

Ackermann數列最終會收斂到1,如下列的幾個例子。例子中的初始值寫在中括號內,再接所產生出的數列,最後數列的長度以大括號表示。

[10] 5 16 8 4 2 1 {6}
[13] 40 20 10 5 16 8 4 2 1 {9}
[14] 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 {17}
[19] 58 29 88 44 22 ... 2 1 {20}
[32] 16 8 4 2 1 {5}
[1] 4 2 1 {3}

Input and Output

你的程式要讀入多對數值,每一個數對表示一個循序的閉集合數列中的第一個數值與最後一個數值,對每一個閉集合數列中的每一個數值,你必須從中找出能產生最大長度的Ackermann數列的數值為何。本問題所計算的數列其值皆不會超過32位元整數的範圍,最後一對整數為0, 0,輸出格式為:

Between L and H, V generates the longest sequence of S values.

其中:

L = 所要計算的數列下限值。

H = 所要計算的數列上限值。

V = 最先得出最長Ackermann數列的值(如果能產生出最長數列的值不只一個,只列出其值最小的那一個)。

S = 最長的數列的長度。

Sample Input

 1 20
35 55
0 0

Sample Output

Between 1 and 20, 18 generates the longest sequence of 20 values.
Between 35 and 55, 54 generates the longest sequence of 112 values.

1. 本題與 100 - The 3n + 1 problem 幾乎一樣,但因為首項不列入計算,所以其輸出會比第100題少1。 
2. 注意1的序列為: [1] 4 2 1 {3},而非[1] {0}。
原文出處

沒有留言:

張貼留言