贝祖公式证明
前言:最近写一道算法题的过程中,遇到了关于贝祖公式的题目,发现其实很简单。根据前人总结证明方法,进行归纳,在此证明。
一. 欧几里得算法
要证明贝祖公式,首先需要知道欧几里得算法,欧几里得算法也叫辗转相除法,用于求两个整数之间的最大公约数。
公式如下:
gcd(a,b) = gcd(b,a mod b) (a>b 且 a mod b 不为0)
证明如下:
- 因为a>b,所以a可以表示为kb+r,r=a mod b
- 从左往右看,假设d是a,b的一个公约数,那么a和b都可以被d整除,r=a-kb,自然r也可以被d整除,所以d也是(b,r),也就是(b,a mod b)的公约数。
- 反过来,假如d是b和r = a mod b的一个公约数,则有b和r都可以被d整除,根据a=kb+r,自然a也可以被d整除,所以d也是(a,b)的公约数。
- 因此,(a,b)和(b,a mod b)的公约数一致,自然最大公约数也一致。
欧几里得算法应用:不断运用该算法,即“两个整数的最大公约数,等于其中较小的那个数和较大数对较小数取模结果的最大公约数。” 将两个数缩小,直到一个数为0,另一个数就是最小公约数
eg,求12和42的最大公约数,gcd(12,42) = gcd(12,6)=gcd(6,0)=6
二、贝祖公式
- 根据前面推导的欧几里得算法,贝祖公式就应运而生啦!
- 两个数的最大公约数可以用两个数的整数倍相加表示,比如6 = 42×1 + 12×(-3)
- 具体公式为:
给定两个整数a和b,一定存在整数x和y,使得ax+by = gcd(a,b)
- 下面我们来证明贝祖公式为什么是对的?
假设 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
来源:CSDN
作者:遇到好事了
链接:https://blog.csdn.net/qq_42549774/article/details/104600285