中国剩余定理:
例如,要找出一个数,除3余1,除5余4,除7余3,求这个数最小是多少。
1. 求35*n%3=1,则n最小为2,35*min=70;求15*n%7=1,15*min=15;求21*n%5=1,21*min=21。
2. 根据定理 如果a%x=b,则(a*k)%x=b*k,得70*1 + 15*3 + 21*4等于199。
3. 得3,5,7的最小公倍数为105,用199除以105,得到余数94,即符合条件的最小数。
欧几里得:
1. 设a=kb+r,则一定存在k使a-kb=a mod b,则r=a mod b。
2. 设d为a,b的公约数,则d|a(d可以整除a)d|b且d|(kb+r),则d|r。
3. 所以d为a,b的公约数,也是b,r的公约数,则最大公约数也相等。
4. 所以gcd(a,b) = gcd(b,r) = gcd(b,a mod b)。
如果a mod b为0,则gcd(a,b)等于b。
int gcd(int a, int b) {
while (b != 0) {
rem = a % b;
a = b;
b = rem;
}
return a;
}
扩展欧几里得:
求方程 ax+by=n的所有x,y的解。
1. 设d=gcd(a,b)=gcd(b,a mod b),则一定存在x1,y1使得ax1+by1=d,bx2+(a%b)y2=d --> bx2+(a-(a/b)*b)y2=d --> bx2+ay2-(a/b)*by2=d
2. 则x1=y2,y1=x2-(a/b)y2
恒等定理: 齐次的项的系数相等
Lucas定理:组合数求摸
取余预算:
(a + b) % p = (a % p + b % p) % p (1)
(a - b) % p = (a % p - b % p) % p (2)
(a * b) % p = (a % p * b % p) % p (3)
a ^ b % p = ((a % p)^b) % p (4)