一.最大公约数与最小公倍数
gcd:一般的,设a1, a2, a3, ......, ak是k个正整数,如果尊在一个整数d,使得d|a1,......,d|ak,那么d则为a1, ......, ak的公约数,在所有的公约数,最大的称为最大公约数。
lcm:同上(最小公倍数)
定理:lcm(a, b) * gcd(a, b) = a * b
粗略的理解:(有详细的公式可以查略,太难打了),两个数的最大公因数是两个数公共质因数的乘积,两个数的最小公倍数是两个数互相没有的质因数的乘积,所以lcm和gcd相乘,就是这两个数的乘积了。
二.辗转相除法
证明:设gcd(a, b) = p, a = kp, b = gp, 因为p是啊a,b最大公约数,所以k,g互质。
因为k,g互质,所以(都等于p嘛)
三.裴蜀定理(贝祖定理)
1.对于不定方程组,其有解的充要条件是,也就是说m是a,b最大公约数的倍数。
证明:
设s为的最小的正整数解,那么我们就是要证明s = gcd(a, b),也就是s | gcd(a, b), gcd(a, b) | s.
令
因为
所以,就是
设
所以
发现r和s均可以转换成一样的线性方程,0 <= r < s, s又是最小的正整数解,所以r = 0
所以s | a,同理可以得到s | b
所以s | gcd(a, b),
得证
2.裴蜀定理的充分性
3.裴蜀定理的必要性
有解,则成立
因为有解,所以整数x, y使成立
因为
所以
4.裴蜀定理引理一
如果a, b为正整数,而且a, b互质,则不存在小于b的正整数k使得
证明:(反证法)
如果满足
那么,b | k * a, 那么k*a中一定包含b的所有质因子
又因为gcd(a, b) = 1, 所以a中没有包含b的质因子
所以k是b的倍数,因为0 < k < b所以不成立
5.裴蜀定理推论
如果a,b为正整数,而且a,b互质,那么0, a, a * 2, a * 3, ...... , a * (b - 1)这些数mod b, 余数互不相等
反证法证明:
如果存在两个同的数i * a, j * a(0 < j < i < b), 它们模b的余数相等,那么的余数就是0,0 < i - j < b, 矛盾
6.裴蜀定理引理二
如果a,b互质,则必定存在一个整数k,满足
根据推论,0, a, 2 * a, ......, (b - 1) * a 模b的结果互不相同,所以模的结果又b个,都在0 ~ b - 1之间,所以存在。
根据引理2,如果a,b互质,则必定存在一个整数k,满足
就是
这与是同理的,同样可以证明裴蜀定理
四.扩展欧几里得算法exgcd
可以在已经知道a,b的情况下,求不定方程的一组整数解。
分析:
设,再设
所以
我们只需要求其中的一组解,所以直接让x1 = y2, y1 = (x2 - a / b) * y2就可以了(注意a/b向下取整)
我们就会发现,1是由2推出来的,2应该也是由3推来的(事实证明也就是这样的)
所以我们可以用递归来解决这个问题,当求解到xn,yn的时候,axn + byn = a(就是最大公约数,注意回归到式子最初始的样子,的本质就是等于gcd(a, b)), xn = 1, yn = 0
void exgcd(ll a, ll b)
{
if(b <= 0)
{
x = 1, y = 0 ;
return ;
}
else
{
exgcd(b, a % b) ;
ll t = x ;
x = y ;
y = t - a / b * y ;
return ;
}
}