• 证明:辗转相除法与更相减损术


    辗转相除法与更相减损术的证明

    前言

    • 这两种方法都是用来求两个数的最大公约数,但是从时间复杂度的角度来讲,辗转相除法的效率会高于更相减损术,尤其是在两数相差比较大的时候。
    • 两者证明方法类似,但因为更相减损术的证明更为简单,并且有了其基础也能更快地去理解辗转相除法,故先证明更相减损术。

    更相减损术的证明:

    更相减损术是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。——百度百科

    Description:

    • \[\forall a,b\in \mathbb{N},a\geq b\:\Rightarrow gcd(a,b)=gcd(b,a-b)=gcd(a,a-b) \]

    • \[\forall a,b\in \mathbb{N}\:\Rightarrow gcd(2a,2b)=2\cdot gcd(a,b) \]

    前置芝士:

    • \(a|b\) 表示 \(a\) 能整除 \(b\)\(a\)\(b\) 的约数)。
    • \(gcd(a,b)\) 表示 \(a,b\) 的最大公约数。
    • \(a\:mod\:b\) 表示 \(a\) 除以 \(b\) 取余数。

    证明:

    • 显然,根据最大公约数的定义,后者是成立的,主要证明前者。
    • 对于 \(a,b\)任意公约数 \(d\) ,因为 \(d|a,d|b\) ,所以 \(d|(a-b)\) 。(不妨设 \(a=x\cdot d,b=y\cdot d\) ,那么 \(a-b=x\cdot d-y\cdot d=(x-y)\cdot d\) ,显然 \((x-y)\cdot d\)\(d\) 的倍数)
    • 因为 \(d\) 是任意取的,所以可以取到整个 \(a,b\) 的公约数集合。故 \(a,b\)公约数集合\(b,a-b\)公约数集合相同,于是他们的最大公约数自然也相等。对于 \(a,a-b\) 同理。

    证毕。

    辗转相除法的证明:

    辗转相除法,即欧几里得算法,同样是一种用来求两个数的最大公约数的算法,但是要比更相减损术更加高效。

    Description:

    • \[\forall a,b\in \mathbb{N},b\neq 0\Rightarrow gcd(a,b)=gcd(b,a\:mod\:b) \]

    前置芝士:

    • 熟悉更相减损术的证明以及取模运算的意义。

    证明:

    • \(a<b\) ,则 \(gcd(b,a\:mod\:b)=gcd(b,a)=gcd(a,b)\) ,命题得证。
    • \(a\geq b\) ,则不妨设 \(a=q\times b+r\) ,其中 \(0\leq r<b\) ,显然 \(r=a\:mod\:b\) 。对于 \(a,b\)任意公约数 \(d\) ,因为 \(d|a,d|(q\times b)\) ,所以 \(d|(a-q\times b)\) ,即 \(d|r\) ,因此 \(d\) 也是 \(b,r\) 的公约数。
    • \(a,b\) 的公约数集合与 \(b,a\:mod\:b\) 的公约数集合相同,于是他们的最大公约数自然也相等。

    证毕。

    2021年1月17日
    ——pycr

    靡不有初,鲜克有终
  • 相关阅读:
    Bacula Plugins
    getopt、getopt_long命令参数
    Notepad++ 快捷键
    make命令
    Linux目录结构
    rhel安装输入法
    libtool编译
    install和cp
    dlopen动态链接库操作
    结构体赋值
  • 原文地址:https://www.cnblogs.com/pycr/p/14288188.html
Copyright © 2020-2023  润新知