当 gcd(m, n) = 1时,我们称 m和n互素。
约定用 m⊥n来表示两者互素。
m / gcd(m, n) ⊥ n / gcd(m, n)
由 gcd和素数序列的关系我们可以得出
k ⊥ m and k ⊥ n ←→ k ⊥ mn
书上看到一种很好玩的一种构造算法。
用来构造所有具有 m⊥n的非负分数 m/n集合,称为Stem-Brocot tree。
建树思想是:从两个分数(0/1, 1/0)开始,重复以下操作,在两个邻接的分数 m/n和 m'/n'之间插入 (m+m')/(n+n')。
这颗树构造能保证相同分数不会出现两次,基于以下事实:
如果在任何构造阶段 m/n和 m'/n'是相继的分数,则有 m'n - mn' = 1
证明:开始时,1*1 - 0*0 = 1满足条件,计算出中间值 (m+m')/(n+n')后,
(m + m')n - m(n + n') = 1 ;
m'(n + n') - (m + m')n' = 1 ;
仍然等价于原方程式。
还有任何 a⊥b是否都能被表示出来?
证明: