辗转相除法求解最大公约数和最小公倍数的数学原理

  摘要:本文证明了辗转相除法求最大公约数的合理性,并且给出了一种根据辗转相除法求出最大公约数后求最小公倍数的方法及其证明。

0. 符号规定

g c d ( a , b ) — — — — — — — — — — — — a 和 b 的 最 大 公 约 数 gcd(a,b)————————————a和b的最大公约数 gcd(a,b)ab

a ( m o d ) b — — — — — — — — — — — — a 除 b 的 余 数 a (mod) b————————————a除b的余数 a(mod)bab

( a , b ) — — — — — — — — — — — — a 和 b 的 最 大 公 约 数 (a,b)————————————a和b的最大公约数 (a,b)ab

[ a , b ] — — — — — — — — — — — — a 和 b 的 最 小 公 倍 数 [a,b]————————————a和b的最小公倍数 [a,b]ab

1.最大公约数——辗转相除法

  辗转相除法是一个求解a和b的最大公约数的算法,这个算法的每一步过程都是先计算 a % b a\%b a%b,如果 a % b = = 0 a\%b==0 a%b==0,那么最大公约数就是a,否则令 a = b , b = a % b a=b,b=a\%b a=b,b=a%b,然后重复第一步。

  这个算法的合理性基于以下定理:a和b的最大公约数等于b和 a % b a\%b a%b的最大公约数,当 a % b = 0 a\%b=0 a%b=0时,b和0的最大公约数就是b, g c d ( b , 0 ) = 0 gcd(b,0)= 0 gcd(b,0)=0,(因为 0 = 0 ∗ b , b = 1 ∗ b 0 = 0*b,b = 1*b 0=0b,b=1b).
  所以这个算法依赖的定理的数学表达形式就是:
g c d ( a , b ) = g c d ( b , a ( m o d ) b ) gcd(a,b)=gcd(b,a(mod)b) gcd(a,b)=gcd(b,a(mod)b)
  正是有了这个定理,我们求解a和b的最大公约数就等价于求解b和 a % b a\%b a%b的最大公约数,然后可以反复递归,直到 a a%b==0 a时,因为 0 = 0 ∗ b , b = b ∗ 1 0 = 0 * b, b = b * 1 0=0b,b=b1,所以 g c d ( b , 0 ) = b gcd(b,0) = b gcd(b,0)=b,b就是此时a和b的最大公约数,根据定理,此时的b也是最初的a和b的最大公约数。

  下面我们来证明一下这个定理。

证明

P r o o f Proof Proof:不妨设 a > b a>b a>b( a < b a<b a<b a % b = a a\%b=a a%b=a,一轮循环后自动变成 g c d ( b , a ) gcd(b,a) gcd(b,a)),由整数拆分的基本定理
a = k b + r ( r < b , k , r 属 于 自 然 数 集 合 ) ① a=kb+r(r<b,k,r属于自然数集合)① a=kb+r(r<b,k,r)
  假设 d d d a a a b b b的任意一个公约数,则
a ( m o d ) d = 0 a(mod)d=0 a(mod)d=0

b ( m o d ) d = 0 b(mod)d=0 b(mod)d=0

  根据①,有:
r = a ( m o d ) b r=a(mod)b r=a(mod)b

r ( m o d ) d = ( a − k b ) ( m o d ) ( d ) = a ( m o d ) d − ( k b ) m o d ( d ) = 0 − 0 ∗ k = 0 r(mod)d=(a-kb)(mod)(d)=a(mod)d-(kb)mod(d)=0-0*k=0 r(mod)d=(akb)(mod)(d)=a(mod)d(kb)mod(d)=00k=0

  所以 d d d也是 b b b a ( m o d ) b a(mod)b a(mod)b的一个公约数;

  所以任意一个 a a a b b b的公约数都是 b b b a ( m o d ) b a(mod)b a(mod)b的公约数;

  同理可证任意一个 b b b a ( m o d ) b a(mod)b a(mod)b的公约数都是 a a a b b b的公约数;

  所以 a a a b b b的公约数组成的集合和 b b b a ( m o d ) b a(mod)b a(mod)b的公约数组成的集合完全相同,

  所以a和b的最大公约数一定也和b和 a ( m o d ) b a(mod)b a(mod)b的最大公约数相等。

  所以当 a ( m o d ) b a(mod)b a(mod)b等于0时, b b b 0 0 0的最大公约数显然等于 b b b,然后往前面返回,就有 a a a b b b的最大公约数等于某轮循环时 a ( m o d ) b a(mod)b a(mod)b等于0时,此轮b的值。

2.最小公倍数——(a,b)[a,b]=ab

  一种快速求解 [ a , b ] [a,b] [a,b]的方法是利用辗转相除法求出 ( a , b ) (a,b) (a,b),然后利用 [ a , b ] = ( a b ) / ( a , b ) [a,b]=(ab)/(a,b) [a,b]=(ab)/(a,b),这基于以下定理:
( a , b ) ∗ [ a , b ] = a ∗ b (a,b)*[a,b]=a*b (a,b)[a,b]=ab

证明

P r o o f Proof Proof:
  先证明 ( a , b ) ∗ [ a , b ] > = a b (a,b)*[a,b]>=ab (a,b)[a,b]>=ab,看到大于等于号,想到要用最大公约数的“最大”二字的性质。
  首先先证明:a和b的任何公倍数都能整除最小公倍数 [ a , b ] [a,b] [a,b]
  利用反证法证明,设c为a和b的任意一个公倍数, d = [ a , b ] d=[a,b] d=[a,b],假设结论不成立,则有
c = k d + r , 0 < r < d c = kd + r, 0 < r < d c=kd+r,0<r<d
  又因为c是a和b的公倍数,即 c % a = 0 且 c % b = 0 c\%a = 0且c\%b=0 c%a=0c%b=0 k d kd kd也是a和b的公倍数,即 k d % a = 0 且 k q % b = 0 kd \% a = 0 且kq\%b = 0 kd%a=0kq%b=0,则根据上面的等式:
r % b = ( c − k d ) % b = c % d − k d % b = 0 r % a = ( c − k d ) % a = c % a − k d % a = 0 r\%b = (c - kd)\% b = c\%d - kd\%b = 0\\ r\%a = (c-kd)\%a = c\%a - kd\%a = 0 r%b=(ckd)%b=c%dkd%b=0r%a=(ckd)%a=c%akd%a=0
  所以r也是a和b的公倍数,然而 r < d r < d r<d,这与d是a和b的最小公倍数相矛盾,因此假设不成立,原结论成立。
   a b ab ab也是a和b的一个公倍数,所以根据上面的定理,有:
a b = n ∗ [ a , b ] , n ∈ ℵ ab=n*[a,b],n\in\aleph ab=n[a,b],n

a = n ∗ ( [ a , b ] / b ) a=n*([a,b]/b) a=n([a,b]/b)
  又因为 [ a , b ] [a,b] [a,b]是b的最小公倍数,所以
[ a , b ] = k 1 b , k 1 ∈ ℵ [a,b]=k_{1}b,k_{1}\in\aleph [a,b]=k1b,k1
  所以
a = n ∗ k 1 a=n*k_{1} a=nk1
  所以n是a的约数;

  同理可证n是b的约数;

  所以n是a和b的约数,那么n应该小于等于最大公约数(a,b):
n < = ( a , b ) ⇒ ( a b ) / [ a , b ] < = ( a , b ) ⇒ a ∗ b < = ( a , b ) ∗ [ a , b ] n<=(a,b)\Rightarrow (ab)/[a,b]<=(a,b)\Rightarrow a*b<=(a,b)*[a,b] n<=(a,b)(ab)/[a,b]<=(a,b)ab<=(a,b)[a,b]
  再证明 a b > = ( a , b ) [ a , b ] ab>=(a,b)[a,b] ab>=(a,b)[a,b],看到小于号,想到要用最小公倍数的"最小"二字的性质:

  设
x = ( a , b ) x=(a,b) x=(a,b)
  则
a = n x , b = m x ( m , n ∈ ℵ ) a=nx,b=mx(m,n\in\aleph) a=nx,b=mx(m,n)

a b / x = n ∗ m ∗ x = n b = m a ab/x=n*m*x=nb=ma ab/x=nmx=nb=ma

  所以
a b / x 是 a 和 b 的 一 个 公 倍 数 ab/x是a和b的一个公倍数 ab/xab
  所以 a b / x ab/x ab/x应该小于等于最小公倍数 [ a , b ] [a,b] [a,b],即
a b / x = a b / ( a , b ) < = [ a , b ] ⇒ a b < = ( a , b ) [ a , b ] ab/x=ab/(a,b)<=[a,b]\Rightarrow ab<=(a,b)[a,b] ab/x=ab/(a,b)<=[a,b]ab<=(a,b)[a,b]
综上.
a ∗ b = ( a , b ) ∗ [ a , b ] a*b=(a,b)*[a,b] ab=(a,b)[a,b]

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值