📅  最后修改于: 2023-12-03 15:42:33.811000             🧑  作者: Mango
鲍姆甜蜜序列 (Baum-Sweet sequence) 是一种二进制序列,对于每个非负整数 $n$,其第 $n$ 项的值如下定义:
例如,当 $n=7$ 时,它的二进制表示为 $111$,其中不包含连续的 $0$,因此第 $7$ 项的值为 $1$;当 $n=20$ 时,它的二进制表示为 $10100$,其中最长的连续 $0$ 的长度为 $2$,因此第 $20$ 项的值为 $0$。
鲍姆甜蜜序列的应用之一是用于代表无理数的部分展开式。具体地,对于一个无理数 $x \in [0, 1]$,我们可以考虑其二进制展开式的连续子段。将这些子段按照字典序排序,并将它们对应的鲍姆甜蜜序列连接起来,得到一个新的二进制序列。这个序列称作 $x$ 的连分数分母的鲍姆甜蜜序列。
例如,对于 $\frac{13}{23}$,其二进制展开式为 $0.10011110010110011\cdots$,其中的连续子段按照字典序排序后得到 $000, 001, 01, 100, 101$,对应的鲍姆甜蜜序列为 $11010$。注意到,这个序列的长度为 $5$,与 $\frac{13}{23}$ 的分母 $23$ 是互质的。这意味着,我们可以用以这个序列为分母,以 $23$ 为分子的最简有理数来逼近 $\frac{13}{23}$,从而得到它的连分数表示。
下面是一个 Python 的实现:
def baum_sweet_sequence(n: int) -> int:
if n == 0:
return 1
k = len(bin(n)[2:].rstrip("0"))
return 1 if k % 2 == 0 else 0
该函数接受一个非负整数 $n$ 作为输入,返回其对应的鲍姆甜蜜序列中的值。其中,bin(n)
返回 $n$ 的二进制表示,rstrip("0")
去除末尾的 $0$,len
返回字符串的长度。