贝祖公式证明

懵懂的女人 提交于 2020-03-02 00:21:02

贝祖公式证明

前言:最近写一道算法题的过程中,遇到了关于贝祖公式的题目,发现其实很简单。根据前人总结证明方法,进行归纳,在此证明。

一. 欧几里得算法

要证明贝祖公式,首先需要知道欧几里得算法,欧几里得算法也叫辗转相除法,用于求两个整数之间的最大公约数。
公式如下:

gcd(a,b) = gcd(b,a mod b) (a>b 且 a mod b 不为0)

证明如下:

  1. 因为a>b,所以a可以表示为kb+r,r=a mod b
  2. 从左往右看,假设d是a,b的一个公约数,那么a和b都可以被d整除,r=a-kb,自然r也可以被d整除,所以d也是(b,r),也就是(b,a mod b)的公约数。
  3. 反过来,假如d是b和r = a mod b的一个公约数,则有b和r都可以被d整除,根据a=kb+r,自然a也可以被d整除,所以d也是(a,b)的公约数。
  4. 因此,(a,b)和(b,a mod b)的公约数一致,自然最大公约数也一致。

欧几里得算法应用:不断运用该算法,即“两个整数的最大公约数,等于其中较小的那个数和较大数对较小数取模结果的最大公约数。” 将两个数缩小,直到一个数为0,另一个数就是最小公约数
eg,求12和42的最大公约数,gcd(12,42) = gcd(12,6)=gcd(6,0)=6

二、贝祖公式

  1. 根据前面推导的欧几里得算法,贝祖公式就应运而生啦!
  2. 两个数的最大公约数可以用两个数的整数倍相加表示,比如6 = 42×1 + 12×(-3)
  3. 具体公式为:

给定两个整数a和b,一定存在整数x和y,使得ax+by = gcd(a,b)

  1. 下面我们来证明贝祖公式为什么是对的?

假设 a>b,当b>0时:

  • 假设,a和b的贝祖公式解为x1和y1,即a·x1+b·y1 = gcd(a,b)

  • 假设,b和a mod b的贝祖公式的解为x2和y2,即b·x2+(a mod b)·y2 = gcd(b,a mod b)

  • 根据欧几里得算法,我们可以知道,gcd(a,b)=gcd(b,a mod b)

  • 因此,a·x1+b·y1 = b·x2+(a mod b)·y2

  • a·x1+b·y1 = b·x2+(a - [a/b]·b )·y2 = a·y2 + b·(x2 - [a/b]·b )

  • 一一对应,可以得到两个等式:
    x1 = y2 ①
    y1 = (x2 - [a/b]·b ) ②

  • 即,a和b贝祖公式的解,可以通过b和a mod b的贝祖公式的解得到,这样就构成了一个递归求解的过程,根据欧几里得算法,层层向下,一直到一个数为0(即b=0时),另一个数是最小公约数。

  • 因为b=0,gcd(a,b) = a,贝祖公式 ax = gcd(a,b) = a,x=1,y可以取0。然后再回溯计算,就可以得到最终的x1和y1啦!(^-^)V

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!