天天看點

第十二屆藍橋杯第三場模拟賽-序列長度

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))
           

繼續閱讀