0473 黄金分割进制
* * * *
拉格朗日计划
* * * *
黄金分割进制

令$\varphi=(1+\sqrt5)/2$,任意正整数都可以用一系列$\varphi$的幂和来表示,即使要求每个幂至多只能使用一次亦然,且这样的表示不唯一。

为使表示唯一,可以进一步要求只能使用有限个幂,且不能使用相邻的幂。例如,$2=\varphi+\varphi^{-2}, 3=\varphi^2+\varphi^{-2}$。

如此则这样的表示可以用一个只包含0、1和小数点的字符串来记录,称为$\varphi$进制表示,例如$1=1_{\varphi}, 2=10.01_{\varphi},3=100.01_{\varphi},14=100100.001001_{\varphi}$。

可以发现1, 2和14的$\varphi$进制表示都是回文串,但3不是。所有不超过1000的正整数中,具有回文$\varphi$进制表示的数之和为4345。

求所有不超过$10^{10}$且具有回文$\varphi$进制表示正整数之和。

本题难度:



解答

初看本题很容易联想到此前(比如第297题)出现过的Zeckendorf表示,从而被误导到需要找出两者的关系,不过实际解法直接得多。

首先注意到除$1$以外其他数的表示都不可避免地要用到$\varphi$的负幂,所以先考虑$\varphi$进制下$10\ldots0.0\ldots01$形式的回文数,亦即$\varphi^n+\varphi^{-n-1}$形式的数,它可以写成$p_k=F_{2k}+F_{2k+6}$,其中$F_k$是以$F_0=F_1=1$为起始项的斐波那契数列。

用$p_k$加上此前已生成过的、不超过$p_{k-2}$(不能出现相邻的幂)的回文数即可递归生成所有满足要求的回文数,最终结果是$35856681704365$。

N=10**10

res=[2,14]
a,b,c=6,14,36

while c<=N:
    res.append(c)
    for p in res:
        if p>=a or p+c>N:
            break
        res.append(p+c)
    a,b,c=b,c,3*c-b
    
print(1+sum(res))