数论的回顾

扩展欧几里得

简单的欧几里得较为简单,这里就不过多赘述。
扩展欧几里得
已知 a a a, b b b的最小公约数为gcd,对于方程 a ∗ x + b ∗ y = g c d a*x+b*y=gcd ax+by=gcd,已知其特解 x 0 x_0 x0, y 0 y_0 y0那么就可得到通解为
x = x 0 + b g c d ⋅ t x = x_0 + \frac{b}{gcd}\cdot t x=x0+gcdbt
y = y 0 − a g c d ⋅ t y=y_0 - \frac{a}{gcd}\cdot t y=y0gcdat

考虑通过欧几里得算法计算 a a a b b b最小公约数达到递归边界时 a n = g c d a_n=gcd an=gcd, b n = 0 b_n=0 bn=0那么此时 x n = 1 x_n=1 xn=1, y n = 0 y_n=0 yn=0, a n ⋅ x n + b n ⋅ y n = g c d a_n\cdot x_n+b_n\cdot y_n=gcd anxn+bnyn=gcd
再考虑欧几里得算法进行两层递归时
a i ⋅ x i + b i ⋅ y i = g c d a_i\cdot x_i +b_i\cdot y_i=gcd aixi+biyi=gcd
b i ⋅ x i + 1 + ( a i % b i ) ⋅ y i + 1 = g c d b_i\cdot x_{i+1}+(a_i \% b_i)\cdot y_{i+1}=gcd bixi+1+(ai%bi)yi+1=gcd
展开第二个式子得到
a i ⋅ y i + 1 + b i ⋅ ( x i + 1 − a i / b i ⋅ y i + 1 ) = g c d a_i\cdot y_{i+1}+b_i\cdot (x_{i+1}-a_i/b_i\cdot y_{i+1})=gcd aiyi+1+bi(xi+1ai/biyi+1)=gcd
联立上述式子则可得到
x i = y i + 1 + 1 x_i=y_{i+1}+1 xi=yi+1+1
y i = b i ⋅ ( x i + 1 − a i / b i ⋅ y i + 1 ) y_i=b_i\cdot (x_{i+1}-a_i/b_i\cdot y_{i+1}) yi=bi(xi+1ai/biyi+1)
通过从递归边界开始进行反推则可得到一个 x 0 x_0 x0, y 0 y_0 y0的特解
在具体做题时判断形如 a ⋅ x + b ⋅ y = c a\cdot x+b\cdot y=c ax+by=c的式子是否有解的条件,即判断 c c c是否能被 a a a b b b的最小公约数整除
代码如下:

ll exgcd(ll a,ll b,ll &x1,ll &y1){
    if(b==0){
        x1 = 1;
        y1 = 0;
        return a;
    }
    ll ret = exgcd(b, a%b, x1, y1);
    ll temp = x1;
    x1 = y1;
    y1 = temp - a/b*y1;
    return ret;
}

乘法逆元

对于一个 a × b ≡ 1 ( m o d    p ) a\times b\equiv1(\mod p) a×b1(modp)将b称为a的乘法逆元,记 b b b i n v ( a ) inv(a) inv(a)

扩展欧几里得求乘法逆元

g c d ( a , p ) = 1 gcd(a,p)=1 gcd(a,p)=1对于 a × b ≡ 1 ( m o d    p ) a\times b\equiv1(\mod p) a×b1(modp)可转换为 a b − p y = 1 ab-py=1 abpy=1,如此则可通过 e x g c d exgcd exgcd求出 a a a的乘法逆元b来,注意最后要将 b b b转换成最小正整数。

费马小定理求乘法逆元

费马小定理为如果 p p p是一个质数,且整数 a a a不是 p p p的倍数,那么满足式子:
a p − 1 ≡ 1 ( m o d    p ) a^{p-1}\equiv1(\mod p) ap11(modp)
简单证明一:考虑到 p p p是一个质数,且整数 a a a不是 p p p的倍数。那么 { a , 2 a , 3 a , 4 a . . . ( p − 1 ) a } \{a,2a,3a,4a...(p-1)a\} {a,2a,3a,4a...(p1)a} p p p的一个完全剩余系,故 1 × 2 × 3 × . . . × ( p − 1 ) ≡ a × 2 a × 3 a × . . . × ( p − 1 ) a ( m o d    p ) 1\times 2\times 3\times... \times(p-1) \equiv a\times2a\times3a\times...\times(p-1)a (\mod p) 1×2×3×...×(p1)a×2a×3a×...×(p1)a(modp)
( p − 1 ) ! ≡ ( p − 1 ) ! a p − 1 (p-1)! \equiv(p-1)!a^{p-1} (p1)!(p1)!ap1又因为 g c d ( ( p − 1 ) ! , p ) = 1 gcd((p-1)!,p)=1 gcd((p1)!,p)=1所以等式两边可以约去 ( p − 1 ) ! (p-1)! (p1)!,最后得到
a p − 1 ≡ 1 ( m o d    p ) a^{p-1}\equiv1(\mod p) ap11(modp)
简单证明二:运用下述欧拉定理即可得证
所以在前提条件为 p p p是一个质数,且整数 a a a不是 p p p的倍数时可以得到 i n v ( a ) = a p − 2 inv(a)=a^{p-2} inv(a)=ap2

线性递推求乘法逆元

求阶乘的乘法逆元

若已知 i n v ( n ! ) inv(n!) inv(n!),则由式子
i n v ( ( n − 1 ) ! ) ⋅ ( n − 1 ) ! ≡ 1 ( m o d    p ) inv((n-1)!)\cdot(n-1)!\equiv1(\mod p) inv((n1)!)(n1)!1(modp)
化为
i n v ( ( n − 1 ) ! ) ⋅ ( n − 1 ) ! ⋅ n ⋅ i n v ( n ! ) ≡ n ⋅ i n v ( n ! ) ( m o d    p ) inv((n-1)!)\cdot(n-1)!\cdot n \cdot inv(n!)\equiv n\cdot inv(n!)(\mod p) inv((n1)!)(n1)!ninv(n!)ninv(n!)(modp)
即可得到递推式
i n v ( ( n − 1 ) ! ) ≡ n ⋅ i n v ( n ! ) ( m o d    p ) inv((n-1)!)\equiv n\cdot inv(n!)(\mod p) inv((n1)!)ninv(n!)(modp)
编写代码时可先通过扩展欧几里得或费马小定理得到 i n v ( n ! ) inv(n!) inv(n!)再进行递推

递推的乘法逆元

对于当前的所求元素 i i i,考虑其和模数 p p p的关系为 p = a ⋅ i + b p=a\cdot i+b p=ai+b
那么 a ⋅ i + b ≡ 0 ( m o d    p ) a\cdot i+b\equiv 0(\mod p) ai+b0(modp)
等式两边同时乘以 i n v ( i ) inv(i) inv(i), i n v ( b ) inv(b) inv(b)得到 a ⋅ i n v ( b ) + i n v ( i ) ≡ 0 ( m o d    p ) a\cdot inv(b) +inv(i)\equiv 0(\mod p) ainv(b)+inv(i)0(modp)
那么 i n v ( i ) ≡ − a ⋅ i n v ( b ) ( m o d   p ) inv(i)\equiv -a\cdot inv(b)(mod\ p) inv(i)ainv(b)(mod p)
最后得到递推式为 i n v ( i ) ≡ − ⌊ p i ⌋ ⋅ i n v ( p % i ) inv(i) \equiv-\lfloor \frac{p}{i}\rfloor\cdot inv(p\%i) inv(i)ipinv(p%i)

中国剩余定理

考虑这样的一个式子
{ x ≡ a 1 ( m o d    m 1 ) x ≡ a 2 ( m o d    m 2 ) ⋯ x ≡ a n ( m o d    m n ) \begin{cases} x\equiv a_1(\mod m_1)\\ x\equiv a_2(\mod m_2)\\ \cdots\\ x\equiv a_n(\mod m_n) \end{cases} xa1(modm1)xa2(modm2)xan(modmn)
中国剩余定理给出了该式子有解的条件以及解的构造方法
m 1 , m 2 ⋯   , m n m_1,m_2\cdots,m_n m1,m2,mn互质,则该方程组有解。
可通过如下方式得到它的解
M = ∏ i = 1 n m i , M i = M m i ∀ i ∈ { 1 , 2 , ⋯   , n } M=\prod\limits_{i=1}^nm_i,M_i=\frac{M}{m_i} \forall i\in\{1,2,\cdots,n\} M=i=1nmi,Mi=miMi{1,2,,n}
t i M i ≡ 1 ( m o d    m i ) t_iM_i\equiv1(\mod m_i) tiMi1(modmi) t i t_i ti M i M_i Mi在模 m i m_i mi意义下的逆元,同时满足 t i M i ≡ 0 ( m o d    m j , j ≠ i ) t_iM_i\equiv0(\mod m_{j,j\neq i}) tiMi0(modmj,j=i)
则可得到该式子解的通式为 x = a 1 t 1 M 1 + a 2 t 2 M 2 + ⋯ + a n t n M n + k M , k ∈ Z x=a_1t_1M_1+a_2t_2M_2+\cdots+a_nt_nM_n+kM,k\in\mathbb{Z} x=a1t1M1+a2t2M2++antnMn+kM,kZ
又因为 M i 和 m i M_i和m_i Mimi互质,所以一定能用扩展欧几里得算法求出这样的 t i t_i ti

扩展中国剩余定理

扩展中国剩余定理是 m 1 , m 2 ⋯   , m n m_1,m_2\cdots,m_n m1,m2,mn不互质的情况下的求解,证明也不是很难,暂且占坑吧,写出其合并两个式子时的通式如下
g c d = g c d ( m i , m i + 1 ) gcd=gcd(m_i,m_{i+1}) gcd=gcd(mi,mi+1)
x ≡ ( i n v ( m 1 g c d , m 2 g c d ) ⋅ a 2 − a 1 g c d ) % m 2 g c d ⋅ m 1 + a 1 ( m o d    m 1 ⋅ m 2 g c d ) x\equiv (inv(\frac{m1}{gcd},\frac{m2}{gcd})\cdot\frac{a_2-a_1}{gcd})\%\frac{m_2}{gcd}\cdot m_1+a_1(\mod \frac{m_1\cdot m_2}{gcd}) x(inv(gcdm1,gcdm2)gcda2a1)%gcdm2m1+a1(modgcdm1m2)

欧拉定理

欧拉函数

欧拉函数:对于一个正整数n,小于n且和n互质的正整数个数(包括1)的个数,记为 ϕ ( n ) \phi(n) ϕ(n)
欧拉函数的通式为 ϕ ( n ) = n ( 1 − 1 p 1 ) ( 1 − 1 p 2 ) . . . ( 1 − 1 p n ) \phi(n)=n(1-\frac{1}{p_1})(1-\frac{1}{p_2})...(1-\frac{1}{p_n}) ϕ(n)=n(1p11)(1p21)...(1pn1)其中 p 1 p_1 p1 p 2 p_2 p2 p n p_n pn是n的所有质因数。
ϕ ( n ) = n ∏ i = 1 n ( 1 − 1 p i ) \phi (n) = n\prod\limits_{i=1}^n(1-\frac{1}{p_i}) ϕ(n)=ni=1n(1pi1)

欧拉定理

g c d ( a , m ) = 1 , gcd(a,m)=1, gcd(a,m)=1, a ϕ ( m ) = 1 ( m o d    m ) a^{\phi{(m)}}=1(\mod m) aϕ(m)=1(modm)
所以采用欧拉定理进行降幂

扩展欧拉定理

a x ≡ a x m o d    ϕ ( m ) + ϕ ( m ) ( m o d    m ) a^x\equiv a^{x\mod \phi{(m)}+\phi{(m)}}(\mod m) axaxmodϕ(m)+ϕ(m)(modm)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值