1. 問題描述:
對于整數 v 和 p,定義 Pierce 序列為:
a[1] = v
a[i] = p % a[i-1]
例如,當 v = 8, p = 21 時,對應的 Pierce 序列為
a[1] = 8
a[2] = 5
a[3] = 1
再往後計算,值變為 0,不在我們考慮的範圍内。是以當 v = 8, p = 21 時, Pierce 序列的長度為 3。當 p 一定時,對于不同的 v 值,Pierce 序列的長度可能不同。當 p = 8 時,若 1<=v<p,最長的 Pierce 序列出現在 v=13時,為(13, 8, 5, 1),長度為 4。當 p=2021 時,最長的 Pierce 序列出現在 v=1160 時,請問這個序列有多長?
2. 思路分析:
感覺這道題目描述的時候就很有問題,有些描述應該需要修改為:當 p = 21時,若 1<=v<p,最長的 Pierce 序列出現在v = 13時,其實已知p、v之後就可以得到對應的 Pierce 序列,是以模拟其中的過程即可
3. 代碼如下:
if __name__ == '__main__':
v, p = 1160, 2021
seq = [v]
while seq[-1] != 0:
seq.append(p % seq[-1])
# 彈出最後一個為0的元素
seq.pop()
print(len(seq))