数论
模运算
-
a m o d b = a − ⌊ a / b ⌋ × b a\ mod \ b = a - \lfloor a / b \rfloor \times b a mod b=a−⌊a/b⌋×b
-
n m o d p n \ mod\ p n mod p得到的结果的正负至于被除数 n n n有关

模运算的性质:
( a + b ) m o d m = ( ( a m o d m ) + ( b m o d m ) ) m o d m (a + b)\ mod\ m = ((a\ mod\ m) + (b\ mod\ m))\ mod\ m (a+b) mod m=((a mod m)+(b mod m)) mod m
( a − b ) m o d m = ( ( a m o d m ) − ( b m o d m ) ) m o d m (a - b)\ mod\ m = ((a\ mod\ m) - (b\ mod\ m))\ mod\ m (a−b) mod m=((a mod m)−(b mod m)) mod m = ( ( a m o d m ) − ( b m o d m ) + m ) m o d m ((a\ mod\ m) - (b\ mod\ m) + m)\ mod\ m ((a mod m)−(b mod m)+m) mod m
( a × b ) m o d m = ( ( a m o d m ) × ( b m o d m ) ) m o d m (a \times b)\ mod\ m = ((a\ mod\ m) \times (b\ mod\ m))\ mod\ m (a×b) mod m=((a mod m)×(b mod m)) mod m
但是除法例外,除法的取模需要用到逆元。
计算减法的时候,通常需要加上模数,防止出现负数。
快速幂
快速求解 a b m o d p a^b \ mod \ p ab mod p,可以采用二进制拼凑的思想
对于 b b b,它可以看成一个二进制数,可以写成 2 2 2的幂相加的形式,那么 a b a^b ab可以写成 a ( 2 i + 2 j + . . . + 2 k ) = a 2 i × a 2 j × . . . × a 2 k ( i , j , k ∈ S , 其中集合 S 为 b 转换成二进制后位置上是 1 的位置 ) a^{(2^{i} + 2^j + ... + 2^k)} = a^{2^i}\times a^{2^j} \times ... \times a^{2^k} \ (i, j, k \in S,其中集合S为b转换成二进制后位置上是1的位置) a(2i+2j+...+2k)=a2i×a2j×...×a2k (i,j,k∈S,其中集合S为b转换成二进制后位置上是1的位置)
我们只需计算的同时预处理每一项 a 2 i a^{2^i} a2i即可
using ll = long long;
ll qmi(ll a, ll b, ll c){
ll res = 1;
while(b){
if(b & 1 == 1) res = res * a % c;
a = a * a % c;
b >>= 1;
}
return res;
}
乘法逆元
若 a × x ≡ 1 ( m o d b ) a \times x \equiv 1 \ (mod \ b) a×x≡1 (mod b),且 a a a与 b b b互质,我们定义 x x x为 a a a的逆元,记为 a − 1 a^{-1} a−1, x x x可称为 a a a在模 b b b意义下的倒数
对于 a b m o d p \frac{a}{b} \ mod \ p ba mod p,我们可以求出 b b b在 m o d p mod \ p mod p意义下的逆元,然后乘上 a a a,再 m o d p mod \ p mod p即可
注意对于数 a a a在模 p p p意义下的乘法逆元,我们需要确保 a a a与 p p p互质,此时才有 a a a的乘法逆元 a − 1 a^{-1} a−1,此条件等价于 p p p是质数
费马小定理
a p − 1 ≡ 1 ( m o d p ) a^{p - 1} \equiv 1 \ (mod \ p) ap−1≡1 (mod p),其中 p p p是素数
费马小定理求逆元
a × a p − 2 ≡ 1 ( m o d p ) a \times a^{p - 2} \equiv 1 \ (mod\ p) a×ap−2≡1 (mod p),根据乘法逆元的定义可知,此时 a a a的逆元是 a p − 2 a^{p - 2} ap−2
ll inv(ll a, ll p){
return qmi(a, p - 2, p);
}
扩展欧几里得求逆元
根据逆元的定义 a x ≡ 1 ( m o d p ) ax \equiv 1 \ (mod \ p) ax≡1 (mod p),我们得到方程: a x − 1 = y p ax - 1 = yp ax−1=yp( a x − 1 ax - 1 ax−1 是 p p p的倍数),则 a x + p y = 1 ax + py = 1 ax+py=1
解方程得 x m o d p x \ mod \ p x mod p得到的就是 a a a的乘法逆元,同时逆元存在的条件是 g c d ( a , p ) = 1 gcd(a, p) = 1 gcd(a,p)=1
求阶乘的乘法逆元
同余
两个整数 a a a和 b b b对用一个正整数 m m m取模后余数相同,则称 a a a和 b b b对模 m m m同余,记作 a ≡ b ( m o d m ) a \equiv b \ (mod\ m) a≡b (mod m),这意味着 m ∣ ( a − b ) m\ | \ (a - b) m ∣ (a−b)
同余的性质:
- 自反性: a ≡ a ( m o d m ) a \equiv a \ (mod\ m) a≡a (mod m)
- 对称性:若 a ≡ b ( m o d m ) a \equiv b \ (mod \ m) a≡b (mod m),则 b ≡ a ( m o d m ) b \equiv a \ (mod \ m) b≡a (mod m)
- 传递性:若 a ≡ b ( m o d m ) , b ≡ c ( m o d m ) a \equiv b \ (mod\ m), b \equiv c \ (mod\ m) a≡b (mod m),b≡c (mod m),则 a ≡ c ( m o d m ) a \equiv c \ (mod\ m) a≡c (mod m)
- 同加性:若 a ≡ b ( m o d m ) a \equiv b \ (mod\ m) a≡b (mod m),则 a ± c ≡ b ± c ( m o d m ) a \pm c \equiv b \pm c \ (mod\ m) a±c≡b±c (mod m)
- 同乘性:若 a ≡ b ( m o d m ) a \equiv b \ (mod\ m) a≡b (mod m),则 a × c ≡ b × c ( m o d m ) a \times c \equiv b \times c \ (mod\ m) a×c≡b×c (mod m),若 a ≡ b ( m o d m ) , c ≡ d ( m o d m ) a \equiv b \ (mod \ m), c \equiv d \ (mod \ m) a≡b (mod m),c≡d (mod m),则 a × c ≡ b × d ( m o d m ) a \times c \equiv b \times d \ (mod\ m) a×c≡b×d (mod m)
- 同幂性:若 a ≡ b ( m o d m ) a \equiv b \ (mod \ m) a≡b (mod m),则 a c ≡ b c ( m o d m ) a^c \equiv b^c \ (mod\ m) ac≡bc (mod m)
- 不满足同除性,但是有,若 c a ≡ c b ( m o d m ) ca \equiv cb \ (mod \ m) ca≡cb (mod m),则 a ≡ b ( m o d m g c d ( m , c ) ) a \equiv b \ (\ mod \ \frac{m}{gcd(m, c)}) a≡b ( mod gcd(m,c)m)
扩展欧几里得定理
对于给定的两个整数 a a a, b b b,必须存在整数 x x x与 y y y,使得 a × x + b × y = g c d ( a , b ) a \times x + b \times y = gcd(a, b) a×x+b×y=gcd(a,b)
裴蜀定理
方程 a × x + b × y = c a \times x + b \times y = c a×x+b×y=c有整数解的充分必要条件是 c c c是 g c d ( a , b ) gcd(a, b) gcd(a,b)的倍数
证明:
-
必要性:令 p = g c d ( a , b ) p = gcd(a, b) p=gcd(a,b),则有 a = p × a ′ a = p \times a' a=p×a′, b = p × b ′ b = p \times b' b=p×b′;则 c = p × ( a ′ x + b ′ y ) c = p \times (a'x + b'y) c=p×(a′x+b′y),即 g c d ( a , b ) gcd(a, b) gcd(a,b)的倍数。
-
充分性:考虑 g c d gcd gcd的欧几里得算法。 a , b a, b a,b通过 b , a % b b, a \% b b,a%b的方式一直辗转下去,最后会出现 p , 0 p, 0 p,0的形式。原因是 0 ≤ a % b ≤ b − 1 0 \leq a \% b \leq b - 1 0≤a%b≤b−1。对于递归出口 p , 0 p, 0 p,0,方程 a × p + 0 × y = c a \times p + 0 \times y = c a×p+0×y=c是否存在解呢?显然有解,由于充分性,这里 a a a取 c p \frac{c}{p} pc即可。那么辗转相除过程中,下面的成立能否推得上面的成立呢?
-
对于方程 b x 1 + a % b × y 1 = c = a x + b y bx_1 + a \% b \times y_1 = c = ax + by bx1+a%b×y1=c=ax+by
-
左边 = b x 1 + ( a − ⌊ a b ⌋ × b ) × y 1 = a y 1 + b x 1 − ⌊ a b ⌋ × b y 1 = a y 1 + b × ( x 1 − ⌊ a b ⌋ × y 1 ) = 右边 = a x + b y 左边 = bx_1 + (a - \lfloor \frac{a}{b} \rfloor \times b) \times y_1 = ay_1 + bx_1 - \lfloor \frac{a}{b} \rfloor \times by_1 = ay_1 + b \times (x_1 - \lfloor \frac{a}{b} \rfloor \times y_1) = 右边 = ax + by 左边=bx1+(a−⌊ba⌋×b)×y1=ay1+bx1−⌊ba⌋×by
-

最低0.47元/天 解锁文章
2772

被折叠的 条评论
为什么被折叠?



