【简单数论】(模运算,快速幂,乘法逆元,同余,exgcd,gcd,欧拉函数,质数,欧拉筛,埃式筛,调和级数枚举,约数,组合数)

数论

模运算

  • a   m o d   b = a − ⌊ a / b ⌋ × b a\ mod \ b = a - \lfloor a / b \rfloor \times b a mod b=aa/b×b

  • n   m o d   p n \ mod\ p n mod p得到的结果的正负至于被除数 n n n有关

image-20250404133801773

模运算的性质:

( 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 (ab) 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,kS,其中集合Sb转换成二进制后位置上是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×x1 (mod b),且 a a a b b b互质,我们定义 x x x a a a的逆元,记为 a − 1 a^{-1} a1, 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} a1,此条件等价于 p p p是质数

费马小定理

a p − 1 ≡ 1   ( m o d   p ) a^{p - 1} \equiv 1 \ (mod \ p) ap11 (mod p),其中 p p p是素数

费马小定理求逆元
a × a p − 2 ≡ 1   ( m o d   p ) a \times a^{p - 2} \equiv 1 \ (mod\ p) a×ap21 (mod p),根据乘法逆元的定义可知,此时 a a a的逆元是 a p − 2 a^{p - 2} ap2

ll inv(ll a, ll p){
   
   
    return qmi(a, p - 2, p);
}

扩展欧几里得求逆元

根据逆元的定义 a x ≡ 1   ( m o d   p ) ax \equiv 1 \ (mod \ p) ax1 (mod p),我们得到方程: a x − 1 = y p ax - 1 = yp ax1=yp a x − 1 ax - 1 ax1 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) ab (mod m),这意味着 m   ∣   ( a − b ) m\ | \ (a - b) m  (ab)

同余的性质:

  • 自反性: a ≡ a   ( m o d   m ) a \equiv a \ (mod\ m) aa (mod m)
  • 对称性:若 a ≡ b   ( m o d   m ) a \equiv b \ (mod \ m) ab (mod m),则 b ≡ a   ( m o d   m ) b \equiv a \ (mod \ m) ba (mod m)
  • 传递性:若 a ≡ b   ( m o d   m ) , b ≡ c   ( m o d   m ) a \equiv b \ (mod\ m), b \equiv c \ (mod\ m) ab (mod m),bc (mod m),则 a ≡ c   ( m o d   m ) a \equiv c \ (mod\ m) ac (mod m)
  • 同加性:若 a ≡ b   ( m o d   m ) a \equiv b \ (mod\ m) ab (mod m),则 a ± c ≡ b ± c   ( m o d   m ) a \pm c \equiv b \pm c \ (mod\ m) a±cb±c (mod m)
  • 同乘性:若 a ≡ b   ( m o d   m ) a \equiv b \ (mod\ m) ab (mod m),则 a × c ≡ b × c   ( m o d   m ) a \times c \equiv b \times c \ (mod\ m) a×cb×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) ab (mod m),cd (mod m),则 a × c ≡ b × d   ( m o d   m ) a \times c \equiv b \times d \ (mod\ m) a×cb×d (mod m)
  • 同幂性:若 a ≡ b   ( m o d   m ) a \equiv b \ (mod \ m) ab (mod m),则 a c ≡ b c   ( m o d   m ) a^c \equiv b^c \ (mod\ m) acbc (mod m)
  • 不满足同除性,但是有,若 c a ≡ c b   ( m o d   m ) ca \equiv cb \ (mod \ m) cacb (mod m),则 a ≡ b   (   m o d   m g c d ( m , c ) ) a \equiv b \ (\ mod \ \frac{m}{gcd(m, c)}) ab ( 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×(ax+by),即 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 0a%bb1。对于递归出口 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+(aba×b)×y1=ay1+bx1ba×by

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值