由第169题的分析可知
$$f(n)=\begin{cases}1 & n\le 1 \\ f(\frac{n-1}{2}) & n \text{ odd} \\ f(\frac{n}{2})+f(\frac{n-2}{2}) & n \text{ even}\end{cases}$$
因此
$$f(2k+1)=f(k), \quad f(2k)=f(k)+f(k-1), \quad f(2k-1)=f(k-1)$$
从而若n是奇数则$f(n)/f(n-1)< 1$,若n是偶数则$f(n)/f(n-1)>1$,因此可以用类似于辗转相除的方法从低位到高位计算出n的二进制表达。
结果是$1,13717420,8$。
a,b,s=123456789,987654321,[]
while a>1 and b>1:
if a>b:
if a%b>0:
s.append(str(a/b))
a%=b
else:
s.append(str(a/b-1))
s.append("1")
a=0
else:
s.append(str(b/a))
b%=a
print ",".join(s[::-1])
|