From 2854a4e57c032150ad0d18bedbeb22572b3632b5 Mon Sep 17 00:00:00 2001 From: 24OI-bot <15963390+24OI-bot@users.noreply.github.com> Date: Wed, 17 Jul 2019 10:38:15 -0400 Subject: [PATCH] style: format markdown files with remark-lint --- docs/misc/stern-brocot.md | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/docs/misc/stern-brocot.md b/docs/misc/stern-brocot.md index 3e0bd2fa..b1bab895 100644 --- a/docs/misc/stern-brocot.md +++ b/docs/misc/stern-brocot.md @@ -10,7 +10,7 @@ $$ 这个 $\frac{1}{0}$ 可能看得你有点懵逼。不过我们不讨论这方面的严谨性,你只需要把它当作 $\infty$ 就行了。 -每次我们在相邻的两个分数 $\frac{a}{b},\frac{c}{d}$ 中间插入一个分数 $\frac{a+c}{b+d}$,这样就完成了一次迭代,得到下一个序列。于是它就会变成这样 +每次我们在相邻的两个分数 $\frac{a}{b},\frac{c}{d}$ 中间插入一个分数 $\frac{a+c}{b+d}$ ,这样就完成了一次迭代,得到下一个序列。于是它就会变成这样 $$ \begin{array}{c} @@ -55,9 +55,9 @@ $$ ## 最简性 -序列中的分数(除了 $\frac{0}{1},\frac{1}{0}$)都是最简分数。 +序列中的分数(除了 $\frac{0}{1},\frac{1}{0}$ )都是最简分数。 -略证:为证明最简性,我们首先证明对于序列中连续的两个分数 $\frac{a}{b},\frac{c}{d}$: +略证:为证明最简性,我们首先证明对于序列中连续的两个分数 $\frac{a}{b},\frac{c}{d}$ : $$ bc-ad=1 @@ -69,9 +69,9 @@ $$ a(b+d)-b(a+c)=ad-bc=1 $$ -后半部分同理。证明了这个,利用扩展欧几里德定理,如果上述方程有解,显然 $\gcd(a,b)=\gcd(c,d)=1$。这样就证完了。 +后半部分同理。证明了这个,利用扩展欧几里德定理,如果上述方程有解,显然 $\gcd(a,b)=\gcd(c,d)=1$ 。这样就证完了。 -有了上面的证明,我们可以证明 $\frac{a}{b}<\frac{c}{d}$。 +有了上面的证明,我们可以证明 $\frac{a}{b}<\frac{c}{d}$ 。 有了这两个性质,你就可以把它当成一棵平衡树来做了。建立和查询就向平衡树一样做就行了。 @@ -81,11 +81,11 @@ $$ ```cpp void build(int a = 0, int b = 1, int c = 1, int d = 0, int level = 1) { - int x = a + c, y = b + d; - //... output the current fraction x/y - //at the current level in the tree - build(a, b, x, y, level + 1); - build(x, y, c, d, level + 1); + int x = a + c, y = b + d; + //... output the current fraction x/y + // at the current level in the tree + build(a, b, x, y, level + 1); + build(x, y, c, d, level + 1); } ``` @@ -93,16 +93,18 @@ void build(int a = 0, int b = 1, int c = 1, int d = 0, int level = 1) { ```cpp string find(int x, int y, int a = 0, int b = 1, int c = 1, int d = 0) { - int m = a + c, n = b + d; - if (x == m && y == n) return ""; - if (x*n < y*m) return 'L' + find(x, y, a, b, m, n); - else return 'R' + find(x, y, m, n, c, d); + int m = a + c, n = b + d; + if (x == m && y == n) return ""; + if (x * n < y * m) + return 'L' + find(x, y, a, b, m, n); + else + return 'R' + find(x, y, m, n, c, d); } ``` # Farey 序列 -Stern-Brocot 树与 Farey 序列有着极其相似的特征。第 $i$ 个 Farey 序列记作 $F_i$,表示把分母小于等于 $i$ 的所有最简真分数按大小顺序排列形成的序列。 +Stern-Brocot 树与 Farey 序列有着极其相似的特征。第 $i$ 个 Farey 序列记作 $F_i$ ,表示把分母小于等于 $i$ 的所有最简真分数按大小顺序排列形成的序列。 $$ \begin{array}{l} @@ -116,7 +118,7 @@ $$ 显然,上述构建 Stern-Brocot 树的算法同样适用于构建 Farey 序列。因为 Stern-Brocot 树中的数是最简分数,因此在边界条件(分母)稍微修改一下就可以形成构造 Farey 序列的代码。你可以认为 Farey 序列 $F_i$ 是 Stern-Brocot 第 $i-1$ 次迭代后得到的序列的子序列。 -Farey 序列同样满足最简性和单调性,并且满足一个与 Stern-Brocot 树相似的性质:对于序列中连续的三个数 $\frac ab,\frac xy,\frac cd$,有 $x=a+c,y=b+d$。这个可以轻松证明,不再赘述。 +Farey 序列同样满足最简性和单调性,并且满足一个与 Stern-Brocot 树相似的性质:对于序列中连续的三个数 $\frac ab,\frac xy,\frac cd$ ,有 $x=a+c,y=b+d$ 。这个可以轻松证明,不再赘述。 由 Farey 序列的定义,我们可以得到 $F_i$ 的长度 $L_i$ 公式为: @@ -124,4 +126,3 @@ $$ L_i=L_{i-1}+\varphi(i)\\ L_i=1+\sum_{k=1}^i\varphi(k) $$ - -- 2.11.0