特别简单的noip-数论选讲

简单数论选讲

声明:此课件中用这个格式的证明不必详细了解,只是为了让你更信服

一、逆元

因为逆元不归我讲,但是又很重要,所以在这里一笔带过

一整数 a a a对同余 p p p之模逆元是指满足以下公式的整数 b b b

a − 1 ≡ b ( m o d   p ) a^{-1}\equiv b(mod\ p) a1b(mod p)

也可以写成以下的式子

a b ≡ 1 ( m o d   p ) ab\equiv 1(mod\ p) ab1(mod p)

整数 a a a对模数 p p p之模逆元存在的充分必要条件是 a a a p p p互素,若此模逆元存在,在模数 p p p下的除法可以用和对应模逆元的乘法来达成,此概念和实数除法的概念相同。

模意义下的逆元就好比实数运算中的倒数,模意义下除以一个数就相当于乘上这个数的逆元,就可以实现模意义下的除法啦!

二、费马小定理

费马小定理在OI中最(wei)大(yi)的用途就是求乘法逆元

内容:当 p p p为质数时有 a p − 1 ≡ 1 ( m o d   p ) a^{p-1}\equiv 1(mod\ p) ap11(mod p)

所以 a p − 2 ∗ a ≡ 1 ( m o d   p ) a^{p-2}*a\equiv 1(mod\ p) ap2a1(mod p),即 a p − 2 a^{p-2} ap2 a a a在模 p p p意义下的逆元

可以直接用快速幂求出

费马小定理的证明(其实并没有多大用):

引理一:如果 p , c p,c p,c互质 a ∗ c ≡ b ∗ c ( m o d   p ) a*c\equiv b*c(mod\ p) acbc(mod p),则有 a ≡ b ( m o d   p ) a \equiv b(mod\ p) ab(mod p)

证明:
∵ a ∗ c ≡ b ∗ c ( m o d   p ) \because a*c\equiv b*c(mod\ p) acbc(mod p)
∴ ( a − b ) ∗ c ≡ 0 ( m o d   p ) \therefore (a-b)*c\equiv 0(mod\ p) (ab)c0(mod p)
∵ c \because c c p p p互质
∴ a − b ≡ 0 ( m o d   p ) \therefore a-b\equiv 0(mod\ p) ab0(mod p)

引理二:若有 p p p的完全剩余系 a 1 , a 2 , . . . , a p {a_1,a_2,...,a_p} a1,a2,...,ap,且 p , c p,c p,c互质,则 a 1 ∗ c , a 2 ∗ c , . . . , a p ∗ c {a_1*c,a_2*c,...,a_p*c} a1c,a2c,...,apc也是 p p p的完全剩余系

完全剩余系,即是通过对一系列正整数 m o d   m mod\ m mod m后产生的从 0 0 0 m − 1 m-1 m1的完全数系

证明:反证法,假设存在 a i ∗ c ≡ a j ∗ c ( m o d   p ) a_i*c\equiv a_j*c(mod\ p) aicajc(mod p),由引理一得, a i ≡ a j ( m o d   p ) a_i\equiv a_j(mod\ p) aiaj(mod p),假设不成立,引理二成立

费马小定理证明:
∵ 0 , 1 , 2 , 3 , . . . , p − 1 \because 0,1,2,3,...,p-1 0,1,2,3,...,p1 p p p的一个完全剩余系
∴ 0 , a , 2 ∗ a , 3 ∗ a , . . . , ( p − 1 ) ∗ a \therefore 0,a,2*a,3*a,...,(p-1)*a 0,a,2a,3a,...,(p1)a p p p的一个完全剩余系,
{ a   m o d   p , 2 ∗ a   m o d   p , 3 ∗ a   m o d   p , . . . , ( p − 1 ) ∗ a   m o d   p } = { 1 , 2 , 3 , . . . , p − 1 } \{a\ mod\ p,2*a\ mod\ p,3*a\ mod\ p,...,(p-1)*a\ mod\ p\}=\{1,2,3,...,p-1\} {a mod p,2a mod p,3a mod p,...,(p1)a mod p}={1,2,3,...,p1}
∴ 1 ∗ 2 ∗ 3 ∗ . . . ∗ ( p − 1 ) ≡ a ∗ 2 ∗ a ∗ 3 ∗ a ∗ . . . ∗ ( p − 1 ) ∗ a ( m o d   p ) \therefore 1*2*3*...*(p-1)\equiv a*2*a*3*a*...*(p-1)*a(mod\ p) 123...(p1)a2a3a...(p1)a(mod p)
∴ ( p − 1 ) ! ≡ a p − 1 ∗ ( p − 1 ) ! ( m o d   p ) \therefore (p-1)!\equiv a^{p-1}*(p-1)!(mod\ p) (p1)!ap1(p1)!(mod p)
∴ a p − 1 ≡ 1 ( m o d   p ) \therefore a^{p-1}\equiv 1(mod\ p) ap11(mod p)

时间复杂度: O ( l o g   p ) O(log\ p) O(log p) 使用条件: a , p a,p a,p互质且 p p p为质数

三、欧拉函数
1.欧拉函数的定义

欧拉函数 Φ ( n ) \Phi(n) Φ(n)代表小于 n n n并且与 n n n互质的数的个数,特别的, Φ ( 1 ) = 1 \Phi(1)=1 Φ(1)=1

2.欧拉函数的求法

Φ ( x ) = x ∗ ∏ i = 1 n ( 1 − 1 p i ) \Phi(x)=x*\prod_{i=1}^{n}(1-\frac{1}{p_i}) Φ(x)=xi=1n(1pi1),其中 p 1 , p 2 , . . . , p n p_1,p_2,...,p_n p1,p2,...,pn x x x所有的质因子;特别的, Φ ( 1 ) = 1 \Phi(1)=1 Φ(1)=1

如何理解这个式子呢?因为对于某一个质因数 p i p_i pi,在 1 1 1 x x x中有 x p i \frac{x}{p_i} pix个数是 p i p_i pi的倍数,那么就有 x ∗ ( 1 − 1 p i ) x*(1-\frac{1}{p_i}) x(1pi1)个数不是 p i p_i pi的倍数,对于所有 x x x的质因数 p i , p 2 , . . . , p n p_i,p_2,...,p_n pi,p2,...,pn考虑的话,就有 x ∗ ∏ i = 1 n ( 1 − 1 p i ) x*\prod_{i=1}^{n}(1-\frac{1}{p_i}) xi=1n(1pi1)个数不是其中任何一个质因数的倍数,也就是与 x x x互质的数的数目,即 Φ ( x ) \Phi(x) Φ(x)

3.欧拉函数的性质

1)欧拉函数是积性函数,即满足:若 a , b a,b a,b互质,则 Φ ( a ∗ b ) = Φ ( a ) ∗ Φ ( b ) \Phi(a*b)=\Phi(a)*\Phi(b) Φ(ab)=Φ(a)Φ(b)(所以可以线性筛)

2)若 p p p为质数,则 Φ ( p ) = p − 1 \Phi(p)=p-1 Φ(p)=p1

3)小于 n n n n n n互质的数的和为 Φ ( n ) ∗ n 2 \Phi(n)*\frac{n}{2} Φ(n)2n(n=1的时候不满足此性质)

4)若 p p p为质数,且 n = p k n=p^k n=pk,则 Φ ( n ) = p k − p k − 1 \Phi(n)=p^k-p^{k-1} Φ(n)=pkpk1

5) n = ∑ d ∣ n Φ ( d ) n=\sum_{d|n}\Phi(d) n=dnΦ(d),此公式在杜教筛中有很大用

上列性质的证明:

1)若 a , b a,b a,b互质,设 a , b a,b a,b所有质因数分别为 { a 1 , a 2 , . . . , a n } \{a_1,a_2,...,a_n\} {a1,a2,...,an}, { b 1 , b 2 , . . . , b m } \{b_1,b_2,...,b_m\} {b1,b2,...,bm},且 ∀ i , j   a i ≠ b j \forall i,j\ a_i\neq b_j i,j ai=bj(因为$a,b $互质)

Φ ( a ) ∗ Φ ( b ) = a ∗ b ∗ ∏ i = 1 n ( 1 − 1 a i ) ∗ ∏ i = 1 m ( 1 − 1 b i ) = Φ ( a ∗ b ) \Phi(a)*\Phi(b)=a*b*\prod_{i=1}^{n}(1-\frac{1}{a_i})*\prod_{i=1}^{m}(1-\frac{1}{b_i})=\Phi(a*b) Φ(a)Φ(b)=abi=1n(1ai1)i=1m(1bi1)=Φ(ab)

2) 1 , 2 , . . . , p − 1 1,2,...,p-1 1,2,...,p1都与 p p p互质,所以 Φ ( p ) = p − 1 \Phi(p)=p-1 Φ(p)=p1

3)若 ( a , n ) = 1 (a,n)=1 (a,n)=1,则有 ( n − a , n ) = 1 (n-a,n)=1 (na,n)=1(想一想,为什么?),所以与 n n n互质的数的平均数是 n / 2 n/2 n/2,而个数又是 Φ ( n ) \Phi(n) Φ(n),可以得到这些数的和就是 Φ ( n ) ∗ n / 2 \Phi(n)*n/2 Φ(n)n/2

4)代入公式显然。

5)引理一:令 F ( x ) = ∑ d ∣ x Φ ( d ) F(x)=\sum_{d|x}\Phi(d) F(x)=dxΦ(d),则 F ( x ) F(x) F(x)为积性函数
证明:设 ( a , b ) = 1 (a,b)=1 (a,b)=1,则
F ( a ) ∗ F ( b ) = ∑ i ∣ a Φ ( i ) ∗ ∑ j ∣ b Φ ( j ) = Φ ( i 1 ) ∗ Φ ( j 1 ) + Φ ( i 1 ) ∗ Φ ( j 2 ) + . . . Φ ( i 2 ) ∗ Φ ( j 1 ) + Φ ( i 2 ) ∗ Φ ( j 2 ) + . . . + Φ ( i p ) ∗ Φ ( j q ) = Φ ( i 1 ∗ j 1 ) + Φ ( i 1 ∗ j 2 ) + . . . + Φ ( i 2 ∗ j 1 ) + Φ ( i 2 ∗ j 2 ) + . . . + Φ ( i p ∗ j q ) F(a)*F(b)=\sum_{i|a}\Phi(i)*\sum_{j|b}\Phi(j)\\ =\Phi(i_1)*\Phi(j_1)+\Phi(i_1)*\Phi(j_2)+...\Phi(i_2)*\Phi(j_1)+\Phi(i_2)*\Phi(j_2)+...+\Phi(i_p)*\Phi(j_q)\\ =\Phi(i_1*j_1)+\Phi(i_1*j_2)+...+\Phi(i_2*j_1)+\Phi(i_2*j_2)+...+\Phi(i_p*j_q) F(a)F(b)=iaΦ(i)jbΦ(j)=Φ(i1)Φ(j1)+Φ(i1)Φ(j2)+...Φ(i2)Φ(j1)+Φ(i2)Φ(j2)+...+Φ(ip)Φ(jq)=Φ(i1j1)+Φ(i1j2)+...+Φ(i2j1)+Φ(i2j2)+...+Φ(ipjq)
(这里排版bug了,也懒得改了)
不难看出 i 1 ∗ j 1 , i 1 ∗ j 2 . . . , i p ∗ j q i_1*j_1,i_1*j_2...,i_p*j_q i1j1,i1j2...,ipjq正好是 a ∗ b a*b ab的所有因数,就相当于是把 a a a的所有因数同时乘上 j 1 , j 2 , . . . , j q j_1,j_2,...,j_q j1,j2,...,jq,所得到的所有数必然是 a ∗ b a*b ab的所有因数,所以 F ( a ) ∗ F ( b ) = F ( a ∗ b ) F(a)*F(b)=F(a*b) F(a)F(b)=F(ab)得证, F ( x ) F(x) F(x)是积性函数

因为 F ( x ) F(x) F(x)为积性函数,所以我们只需要观察 x = p k x=p^k x=pk的时候是否满足即可

F ( p k ) = Φ ( p 0 ) + Φ ( p 1 ) + . . . + Φ ( p k ) F(p^k)=\Phi(p^0)+\Phi(p^1)+...+\Phi(p^k) F(pk)=Φ(p0)+Φ(p1)+...+Φ(pk)

由性质(4)得, F ( p k ) = 1 + p 1 − p 0 + p 2 − p 1 + . . . + p k − p k − 1 = p k F(p^k)=1+p^1-p^0+p^2-p^1+...+p^k-p^{k-1}=p^k F(pk)=1+p1p0+p2p1+...+pkpk1=pk

因为 F ( x ) F(x) F(x)是积性函数,所以对于所有的正整数,都有 n = ∑ d ∣ n Φ ( d ) n=\sum_{d|n}\Phi(d) n=dnΦ(d),性质(5)得证

4.欧拉定理

一般的欧拉定理叙述为:对于 ∀ a , p \forall a,p a,p,若 g c d ( a , p ) = 1 gcd(a,p)=1 gcd(a,p)=1,则 ∀ n , a n ≡ a n   m o d   Φ ( p ) ( m o d   p ) \forall n,a^n\equiv a^{n\ mod\ \Phi(p)}(mod\ p) n,anan mod Φ(p)(mod p)

n = Φ ( p ) n=\Phi(p) n=Φ(p)时,$a^{\Phi§}≡1(mod\ p) $(这玩意甚至可以直接推出费马小定理…)

证明:

欧拉定理的证明其实和费马小定理十分相似…

引理一:同费马小定理的引理一,如果 p , c p,c p,c互质 a ∗ c ≡ b ∗ c ( m o d   p ) a*c\equiv b*c(mod\ p) acbc(mod p),则有 a ≡ b ( m o d   p ) a \equiv b(mod\ p) ab(mod p)

引理二:若 a , b a,b a,b p p p互质,则 a ∗ b a*b ab也与 p p p互质

证明:这条是显然(凑字数)的,因为 a ∗ b a*b ab不会多出任何 p p p的质因数,所以一定互质…

引理三:设小于 p p p并且与 p p p互质的数分别为 x 1 , x 2 , . . . , x Φ ( p ) x_1,x_2,...,x_{\Phi(p)} x1,x2,...,xΦ(p),且 p , c p,c p,c互质,则 c ∗ x 1 , c ∗ x 2 , . . . , c ∗ x Φ ( p ) c*x_1,c*x_2,...,c*x_{\Phi(p)} cx1,cx2,...,cxΦ(p)和它在模 p p p意义下等价

证明:由引理二, c ∗ x 1 , c ∗ x 2 , . . . , c ∗ x Φ ( p ) c*x_1,c*x_2,...,c*x_{\Phi(p)} cx1,cx2,...,cxΦ(p)一定都与 p p p互质,如果 ∃ i , j \exists i,j i,j使得 c ∗ x i ≡ c ∗ x j ( m o d   p ) c*x_i\equiv c*x_j(mod\ p) cxicxj(mod p),由引理一, x i ≡ x j ( m o d   p ) x_i\equiv x_j(mod\ p) xixj(mod p),与假设矛盾,所以 c ∗ x 1 , c ∗ x 2 , . . . , c ∗ x Φ ( p ) c*x_1,c*x_2,...,c*x_{\Phi(p)} cx1,cx2,...,cxΦ(p) x 1 , x 2 , . . . , x Φ ( p ) x_1,x_2,...,x_{\Phi(p)} x1,x2,...,xΦ(p)的一组置换,在模 p p p意义下是等价的

欧拉定理证明:

∵ a , p \because a,p a,p互质

由引理三,有 x 1 ∗ x 2 ∗ . . . ∗ x Φ ( p ) ≡ a ∗ x 1 ∗ a ∗ x 2 ∗ . . . ∗ a ∗ x Φ ( p ) ( m o d   p ) x_1*x_2*...*x_{\Phi(p)}\equiv a*x_1*a*x_2*...*a*x_{\Phi(p)}(mod\ p) x1x2...xΦ(p)ax1ax2...axΦ(p)(mod p)
∴ ∏ i = 1 Φ ( p ) x i ≡ a Φ ( p ) ∗ ∏ i = 1 Φ ( p ) x i ( m o d   p ) \therefore \prod_{i=1}^{\Phi(p)}x_i\equiv a^{\Phi(p)}*\prod_{i=1}^{\Phi(p)}x_i(mod\ p) i=1Φ(p)xiaΦ(p)i=1Φ(p)xi(mod p)
∴ a Φ ( p ) ≡ 1 ( m o d   p ) \therefore a^{\Phi(p)}\equiv 1(mod\ p) aΦ(p)1(mod p)

由欧拉定理,我们可以找出另一种逆元的求法, a a a在模 p p p意义下的逆元为 a Φ ( p ) − 1 a^{\Phi(p)-1} aΦ(p)1

这一求法相较费马小定理,少了对 p p p是否为质数的限制,只需 a , p a,p a,p互质即可,这一条也是 a a a存在逆元的充要条件,所以用欧拉函数求逆元是最万能的方法(可惜没人用)

5.扩展欧拉定理

扩展欧拉定理的叙述为:对于 ∀ a , p \forall a,p a,p g c d ( a , p ) ≠ 1 gcd(a,p)\neq 1 gcd(a,p)=1,则有

a n ≡ a n   m o d   Φ ( p ) ( m o d   p ) a^n\equiv a^{n\ mod\ \Phi(p)}(mod\ p) anan mod Φ(p)(mod p),( n < Φ ( p ) n<\Phi(p) n<Φ(p))(屁话)

a n ≡ a n   m o d   Φ ( p ) + Φ ( p ) ( m o d   p ) a^n\equiv a^{n\ mod\ \Phi(p)+\Phi(p)}(mod\ p) anan mod Φ(p)+Φ(p)(mod p),( o t h e r w i s e otherwise otherwise)

证法太麻烦,noip也不带考的,大家略微了解一下就好了!(如果非要看证法可以看另一篇课件)

6.欧拉函数的线性筛法

首先根据积性函数的性质,如果 i , j i,j i,j互质,则 Φ ( i ∗ j ) = Φ ( i ) ∗ Φ ( j ) \Phi(i∗j)=\Phi(i)∗\Phi(j) Φ(ij)=Φ(i)Φ(j)
所以对于 i   m o d   p r i m e j ≠ 0 i\ mod\ prime_j\neq 0 i mod primej=0的情况, Φ ( i ∗ p r i m e j ) \Phi(i*prime_j) Φ(iprimej)直接等于 Φ ( i ) ∗ Φ ( p r i m e j ) \Phi(i)*\Phi(prime_j) Φ(i)Φ(primej)即可。

对于 i   m o d   p r i m e j = 0 i\ mod\ prime_j=0 i mod primej=0的情况,考虑求解 Φ ( n ) \Phi(n) Φ(n)的公式,多乘一个 p r i m e j prime_j primej并不会多一个质因子,只有前面的 n n n多乘了一个 p r i m e j prime_j primej,所以这种情况 Φ ( i ∗ p r i m e j ) = Φ ( i ) ∗ p r i m e j \Phi(i*prime_j)=\Phi(i)*prime_j Φ(iprimej)=Φ(i)primej

详细代码如下:

inline void prime_shaker(int n){
    phi[1]=1;
    for(int i=2;i<=n;i++){
        if(!pd[i]) prime[++top]=i,phi[i]=i-1;
        for(int j=1;j<=top && 1ll*prime[j]*i<=n;j++){
            pd[i*prime[j]]=true;
            if(i%prime[j]==0){
                phi[i*prime[j]]=phi[i]*prime[j];
                break;
            }
            else phi[i*prime[j]]=phi[i]*phi[prime[j]];
        }
    }
}

没错我大括号不换行,你打我啊~

中国剩余定理(crt)
简单的中国剩余定理

设有模线性方程组(S):
( S ) : { x ≡ a 1 ( m o d   m 1 ) x ≡ a 2 ( m o d   m 2 ) . . . x ≡ a n ( m o d   m n ) (S) : \left \{ \begin{aligned} x& \equiv a_1(mod\ m_1)\\ x& \equiv a_2(mod\ m_2)\\ &...\\ x& \equiv a_n(mod\ m_n) \end{aligned} \right. (S): xxxa1(mod m1)a2(mod m2)...an(mod mn)
m 1 , m 2 , . . . , m n m_1,m_2,...,m_n m1,m2,...,mn两两互质,中国剩余定理就是一个通过构造方式求解一组 x x x的算法

因为是构造,所以先直接告诉大家构造方式:

M = ∏ i = 1 n m i , M i = M / m i M=\prod^{n}_{i=1} m_i,M_i=M/m_i M=i=1nmi,Mi=M/mi M i − 1 M^{−1}_i Mi1 M i M_i Mi m i m_i mi意义下的逆元,则通解 x = ∑ i = 1 n a i ∗ M i ∗ M i − 1 x=\sum ^{n}_{i=1}a_i∗M_i∗M^{−1}_i x=i=1naiMiMi1

这个构造式应该怎么考虑呢?

通解 x x x可以看作是一堆奇怪东西的和( ∑ j = 1 n a j ∗ M j ∗ M j − 1 \sum_{j=1}^{n}a_j*M_j*M_j^{-1} j=1najMjMj1),我们考虑这个和 x x x在第 i i i个方程组中是什么样的

对于 i ≠ j i\neq j i=j的项,相当于是 a j ∗ a_j* aj一个包含因数 m i m_i mi的数 ∗ * 另一个奇怪的数,这一项包含因数 m i m_i mi,所以在第 i i i个方程组的贡献是 0 0 0

对于 i = j i=j i=j的项,相当于是 a i ∗ M i ∗ M i − 1 = a i a_i*M_i*M_i^{-1}=a_i aiMiMi1=ai,贡献是 a i a_i ai

所以 x   m o d   m i = 0 + 0 + . . . + 0 + a i = a i x\ mod\ m_i=0+0+...+0+a_i=a_i x mod mi=0+0+...+0+ai=ai,该构造成立

这个构造方式只能适用于 m i m_i mi两两互质的情况,且如果 ∏ i = 1 n m i \prod_{i=1}^nm_i i=1nmi过大的话也不好计算,所以就有了扩展的中国剩余定理

扩展中国剩余定理(excrt)

前置技能:扩展欧几里得算法(exgcd)

扩展欧几里得算法不归我讲…所以我先只介绍下它的用处

扩展欧几里得算法可以快速求出 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b)的一组解 x , y x,y x,y,假设我们已经掌握了这个算法,那么我们来利用这个算法推一下中国剩余定理吧!

其实扩展crt特别简单…假设你搞出了前 k k k组的一个最小正整数 x x x,想推出前 k + 1 k+1 k+1个方程的解
M = ∏ i = 1 k m i M=\prod_{i=1}^k m_i M=i=1kmi,显然 ∀ t , x + t ∗ M \forall t,x+t*M t,x+tM都是满足的

那么对于新的一组方程 x ≡ a k + 1 ( m o d   m k + 1 ) x\equiv a_{k+1}(mod\ m_{k+1}) xak+1(mod mk+1)我们要找的是令 x + t ∗ M ≡ a k + 1 ( m o d   m k + 1 ) x+t*M\equiv a_{k+1}(mod\ m_{k+1}) x+tMak+1(mod mk+1)最小的 t t t
t ∗ M + m k + 1 ∗ p ≡ a k + 1 − x t*M+m_{k+1}*p\equiv a_{k+1}-x tM+mk+1pak+1x,可以轻松的利用exgcd求出最小解,若某时某刻exgcd无解,则原模线性方程组无解。

大致代码如下:

typedef long long LL;
LL calc(){
	LL M=m[1],x=a[1];///第一组的解就是a[1],此时M之积为m[1]
    for(int i=2;i<=n;i++){
        LL g=gcd(M,m[i]),t=((a[i]%m[i]-x%m[i])%m[i]+m[i])%m[i];
        if(t%g!=0) return -1;//判断exgcd是否有解
        LL xx,y;
        exgcd(M,m[i],xx,y);
        xx=mul(xx,t/g,m[i]/g);//快速乘,防止爆long long
        x=xx*M+x;
        M=M*(m[i]/g);
        x=(x%M+M)%M;
    }
    return x%M;
}

啊…数学真是太奇妙了!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值