数论1:整除与最大公约数
数论1:整除与最大公约数
带余除法与整除
整除符号:a | b (a是b的约数)
b = ka
算术基本的定理:
质因数分解唯一
结论(复杂度计算相关):
素数无限
:小于等于n的素数个数
整除性质:
- a | c, b | c, (a, b) = 1 , 则 ab | c
- a | bc , (a, b) = 1, 则 a | c (因为ab互质,所以a因子一定在c里)
- p | ab, 则 p|a 或 p | b
公约数
gcd: (), lcm: []
结论:[a,b] * (a, b) = a * b
欧几里得算法:
(a, b) = (a - b, b) = (b, a mod b)
(a, b) -> (b, a mod b) -> ….
O (log (min(a, b)))
对于多个数做欧几里得算法的复杂度:n + log (max{ai})
lcm(a, b) = (a / (a, b)) * b //防爆ll
gcd求法二: a,b中偶数的 /= 2,适用大整数
裴蜀定理
一定存在整数解,满足 ax + by = gcd (a, b)
(a, b) | d au + bv = d,存在整数解 u, v
裴蜀的严谨证明见扩欧
扩展欧几里得
系数化为欧几里得,分解a
ll exgcd(ll a, ll b, ll &x, ll &y) {
if (b == 0) {
x = 1;
y = 0;
return a;
}
ll d = exgcd(b, a % b, y, x);
y -= (a / b) * x;
return d;
}
扩欧通解计算
特解:
通解(左减右加):
习题
(大致按照难度升序)
裴蜀
【模板】裴蜀定理:https://www.luogu.com.cn/problem/P4549
裴蜀简单推广到多个变量,最小的就是所有数求个gcd
买不到的数目:https://www.luogu.com.cn/problem/P3951
一个不是很严谨的想法:a,b都要拿的时候,最小不能凑成的数目是 a * b,因为要么拿a个b,要么拿b个a,而ab都要拿且互质,所以不可能凑成a * b的大小。a,b可以都不拿,答案就是 a*b - a - b。严谨证明见扩欧
麦香牛块Beef McNuggets:https://www.luogu.com.cn/problem/P2737
Fox And Jumping: https://codeforces.com/problemset/problem/510/D
https://www.luogu.com.cn/problem/P4571
https://www.luogu.com.cn/problem/P2520
扩展欧几里得
两道模板:
http://oj.daimayuan.top/course/12/problem/487
用exgcd求出最小解之后利用通解的公式在限定范围内调节
其实只需调节一次,因为exgcd解出的就是最小解
http://oj.daimayuan.top/course/12/problem/488
相关题单
扩欧:https://www.luogu.com.cn/problem/list?tag=242&page=1&orderBy=difficulty&order=asc
整数与除数: https://www.luogu.com.cn/training/216#problems
基础数学问题:https://www.luogu.com.cn/training/117#problems
能力提升综合题单Part6 数学1:https://www.luogu.com.cn/training/9377