本文无特殊说明,字母代表的都为整数
公约数定义
若d|a,d|b。则d为a和b的公约数
在d的集合中,最大的d称为最大公约数,表示为(a,b)或gcd(a,b),最大公约数为正整数
公倍数定义
若a|c且b|c,则c为a和b的公倍数
在c的集合中,最大的c称为最大公倍数,表示为[a,b]货lcm(a,b),最大公倍数为正整数
互质(互素)
若(a,b)=1,则a与b互质
公约数性质
由于下列性质很显然,在这里不给出证明
1.(±a±b)=(a,b)
2.(a,b)=(b,a)
3.(a,b+ax)=(a,b)
4.(a,0)=|a|
5.(a,ka)=|a|
6.(ma,mb)=m(a,b) (m>0)
7.(a,b)=d>0,则(a/d,b/d)=1
8.若b|ac且(b,c)=1,则b|a
裴蜀定理
当a,b不全为0,则有x,y,使ax+by=(a,b)
集合A={q|q=ax+by}中最小正元素为(a,b)
1.(a,b)=1,则ax+by=1
2.若m|a,m|b,则m|(a,b)。即a和b的任一公约数都是gcd(a,b)的一个约数。
公倍数性质
1.a,b的任一公倍数都是lcm(a,b)的倍数
2.(a,b)[a,b]=|ab|
玄学
更相减损术
(a,b)=(b-a,a)
(a,b,c)=(a,b-a,c-b)
欧几里得算法
(a,b)=(b,a%b)
用于写gcd:
inline int gcd(int a,int b){
return b == 0 ? a : gcd(b,a % b);
}
虽然gcd一般使用欧几里得算法,但是在数据大的时候,即使用了高精度来存储数据时,鉴于高精度算法中模运算十分难写,往往用更相减损术