数论——同余

定义:

a , b a,b a,b 为两个整数,满足 a   m o d   m = b   m o d   m a \bmod m = b \bmod m amodm=bmodm ( a − b ) ∣ m (a-b) | m (ab)m 则称 a a a b b b 关于模 m m m 同余,记为 a ≡ b ( m o d m ) a \equiv b \pmod{m} ab(modm)

性质:

  1. a ≡ a ( m o d m ) a \equiv a \pmod{m} aa(modm)

  2. a ≡ b ( m o d m ) a \equiv b \pmod{m} ab(modm) , 则 b ≡ a ( m o d m ) b \equiv a \pmod{m} ba(modm)

  3. a ≡ b ( m o d m )  ,  b ≡ a ( m o d m ) a \equiv b \pmod{m} \text{ , } b \equiv a \pmod{m} ab(modm) , ba(modm)

  4. a ≡ b ( m o d m ) a \equiv b \pmod{m} ab(modm) , 则 a + c ≡ b + c ( m o d m ) a+c \equiv b+c \pmod{m} a+cb+c(modm)

  5. a ≡ b ( m o d m ) a \equiv b \pmod{m} ab(modm) , 则 a × c ≡ b × c ( m o d m ) a \times c \equiv b \times c \pmod{m} a×cb×c(modm)

  6. a × b   m o d   k = ( a   m o d   k × b   m o d   k )   m o d   k a\times b \bmod k = (a \bmod k \times b \bmod k) \bmod k a×bmodk=(amodk×bmodk)modk

  7. ( a + b )   m o d   k = ( a   m o d   k + b   m o d   k )   m o d   k (a+ b) \bmod k = (a \bmod k + b \bmod k) \bmod k (a+b)modk=(amodk+bmodk)modk

  8. a ≡ b ( m o d m ) a \equiv b \pmod{m} ab(modm) , 则 a n ≡ b n ( m o d m ) a^n \equiv b^n \pmod{m} anbn(modm)

  9. a ≡ b ( m o d m )  ,  c ≡ d ( m o d m ) a \equiv b \pmod{m} \text{ , } c \equiv d \pmod{m} ab(modm) , cd(modm) , 则 a × c ≡ b × d ( m o d m ) a \times c \equiv b \times d \pmod{m} a×cb×d(modm)

证明:
有:

a × c   m o d   m = ( a   m o d   m × c   m o d   m )   m o d   m a \times c \bmod m =(a \bmod m \times c \bmod m) \bmod m a×cmodm=(amodm×cmodm)modm

b × d   m o d   m = ( b   m o d   m × d   m o d   m )   m o d   m b \times d \bmod m =(b \bmod m \times d \bmod m) \bmod m b×dmodm=(bmodm×dmodm)modm

a   m o d   m = b   m o d   m  ,  c   m o d   m = d   m o d   m a \bmod m = b \bmod m \text{ , } c \bmod m = d \bmod m amodm=bmodm , cmodm=dmodm

则:

a × c   m o d   m = b × d   m o d   m a \times c \bmod m = b \times d \bmod m a×cmodm=b×dmodm

所以:

a × c ≡ b × d ( m o d m ) a \times c \equiv b \times d \pmod{m} a×cb×d(modm)

  1. a × p ≡ x ( m o d m )  ,  a × q ≡ x ( m o d m ) a\times p \equiv x \pmod{m} \text{ , } a\times q \equiv x \pmod{m} a×px(modm) , a×qx(modm) p , q p,q p,q 互质 , 则 a   m o d   p × q = x a \bmod p \times q = x amodp×q=x

证明:

s , t s,t s,t 使

a = s × p + x  ,  a = t × q + x a = s \times p + x \text{ , } a = t \times q + x a=s×p+x , a=t×q+x

则:

s × p = t × q s \times p = t \times q s×p=t×q

因为 p , q p,q p,q 互质,所以 p ∣ t  ,  q ∣ s p|t \text{ , } q|s pt , qs

那么一定有 r r r 使

s = q × r s = q \times r s=q×r

则:

a = r × p × q + x a = r \times p \times q + x a=r×p×q+x

所以:

a   m o d   p × q = x a \bmod p \times q = x amodp×q=x

前置芝士gcd

拓展欧几里得算法

用途: 求 a × x + b × y = gcd ⁡ ( a , b ) a \times x + b \times y = \gcd (a,b) a×x+b×y=gcd(a,b)

解法:

有:

gcd ⁡ ( a , b ) = gcd ⁡ ( b , a   m o d   b ) \gcd (a,b) = \gcd (b,a \bmod b) gcd(a,b)=gcd(b,amodb)

b × x ′ + ( a   m o d   b ) × y ′ = gcd ⁡ ( b , a   m o d   b ) b \times x' + ( a \bmod b ) \times y' = \gcd (b,a \bmod b) b×x+(amodb)×y=gcd(b,amodb)

所以:

b × x ′ + ( a   m o d   b ) × y ′ = a × x + b × y b \times x' + ( a \bmod b ) \times y' = a \times x + b \times y b×x+(amodb)×y=a×x+b×y

因为 a   m o d   b = a − ⌊ a / b ⌋ × b a \bmod b = a- \lfloor a/b \rfloor \times b amodb=aa/b×b

所以右式整理得:

b × x ′ + ( a   m o d   b ) × y ′ b \times x' + ( a \bmod b ) \times y' b×x+(amodb)×y

= b × x ′ + ( a − ⌊ a / b ⌋ × b ) × y ′ = b \times x' + ( a- \lfloor a/b \rfloor \times b ) \times y' =b×x+(aa/b×b)×y

= a × y ′ + b × ( x ′ − ⌊ a / b ⌋ × y ′ ) = a\times y' + b\times ( x' - \lfloor a/b \rfloor \times y') =a×y+b×(xa/b×y)

所以

x = y ′  ,  y = x ′ − ⌊ a / b ⌋ × y ′ x=y' \text{ , } y= x' - \lfloor a/b \rfloor \times y' x=y , y=xa/b×y

就可以递归求解:

int exgcd(int a,int b,int &x,int &y)
{
	if(b==0)
	{
		x=1;y=0;
		return a;
	}
	int gcd=exgcd(b,a%b,x,y);
	int tmp=x;
	x=y;
	y=tmp-a/b*y;
	return gcd;
}

定理1:

若同余方程 a × x + b × y = c a \times x + b \times y = c a×x+b×y=c 有整数解,则有 gcd ⁡ ( a , b ) ∣ c \gcd(a,b) | c gcd(a,b)c

定理2:

gcd ⁡ ( a , b ) = 1 \gcd (a,b) = 1 gcd(a,b)=1 x 0 , y 0 x_0 , y_0 x0,y0 a × x + b × y = c a \times x + b \times y = c a×x+b×y=c 的一组解,那么方程的任意一组解为 x = x 0 + b × t , y = y 0 + a × t x=x_0 + b \times t , y=y_0 + a \times t x=x0+b×t,y=y0+a×t

特解:

x x x 的最小正整数解,即 t = b / gcd ⁡ ( a , b )  ,  x = ( x   m o d   t + t )   m o d   t t = b / \gcd(a,b) \text{ , } x= ( x \bmod t + t ) \bmod t t=b/gcd(a,b) , x=(xmodt+t)modt

例题:青蛙的约会

题目传送门

思路

因为两个青蛙同时跳到同一个点上才算碰面,设 t t t 为跳的次数, p p p 为两个青蛙跳的圈数之差,有如下式子:

( x + m × t ) − ( y + n × t ) = p × L (x+m \times t ) - ( y+n \times t ) = p \times L (x+m×t)(y+n×t)=p×L

整理得:

( n − m ) × t + L × p = x − y (n-m) \times t + L \times p = x - y (nm)×t+L×p=xy

首先,要判断 gcd ⁡ ( n − m , L ) ∤ x − y \gcd ( n-m , L ) \nmid x-y gcd(nm,L)xy 的情况。

然后,直接套拓展欧几里得算法,求出 ( n − m ) × t + L × p = gcd ⁡ ( n − m , L ) (n-m) \times t + L \times p = \gcd ( n-m , L ) (nm)×t+L×p=gcd(nm,L) 一组解 t 0  ,  p 0  ,  g c d = gcd ⁡ ( n − m , L ) t_0 \text{ , } p_0 \text{ , } gcd= \gcd ( n-m , L ) t0 , p0 , gcd=gcd(nm,L)

带入特解(本题求的是 t t t 的最小解),求出 ( n − m ) × t + L × p = gcd ⁡ ( n − m , L ) (n-m) \times t + L \times p = \gcd ( n-m , L ) (nm)×t+L×p=gcd(nm,L) t 0 t_0 t0 的最小解 t ′ t' t

t ′ = ( t 0   m o d   L g c d + L g c d )   m o d   L g c d t'= ( t_0 \bmod \dfrac{L}{gcd} + \dfrac{L}{gcd} ) \bmod \dfrac{L}{gcd} t=(t0modgcdL+gcdL)modgcdL

t = t ′ × x − y g c d t = t' \times \dfrac{x - y}{gcd} t=t×gcdxy

所以

t = ( x − y g c d × t 0   m o d   L g c d + L g c d )   m o d   L g c d t=(\dfrac{x - y}{gcd} \times t_0 \bmod \dfrac{L}{gcd} + \dfrac{L}{gcd} ) \bmod \dfrac{L}{gcd} t=(gcdxy×t0modgcdL+gcdL)modgcdL

C o d e Code Code

#define int long long
signed main()
{
	int x,y,m,n,l;
	int X,Y,gcd;
	cin>>x>>y>>m>>n>>l;
	int A=x-y,B=n-m;
	if(B<0)//注意取反!!!
	{
		B=-B;
		A=-A;
	}
	if(A%(gcd=exgcd(B,l,X,Y))!=0)
		cout<<"Impossible"<<endl;
	else
		cout<<(  A/gcd * X % (l/gcd) + (l/gcd)  ) % (l/gcd)<<endl;
}

中国剩余定理(CRT)

思想

用于求:

{ x ≡ a 1 ( m o d m o d 1 ) x ≡ a 2 ( m o d m o d 2 ) x ≡ a 3 ( m o d m o d 3 ) . . . x ≡ a n − 2 ( m o d m o d n − 2 ) x ≡ a n − 1 ( m o d m o d n − 1 ) x ≡ a n ( m o d m o d n ) \begin{cases} x \equiv a_1 \pmod{mod_1} \\ x \equiv a_2 \pmod{mod_2} \\ x \equiv a_3 \pmod{mod_3} \\ ... \\ x \equiv a_{n-2} \pmod{mod_{n-2}} \\ x \equiv a_{n-1} \pmod{mod_{n-1}} \\ x \equiv a_n \pmod{mod_n} \end{cases} xa1(modmod1)xa2(modmod2)xa3(modmod3)...xan2(modmodn2)xan1(modmodn1)xan(modmodn)

其中 m o d 1 , m o d 2 , m o d 3 , . . . , m o d n mod_1 , mod_2 , mod_3 , ... , mod_n mod1,mod2,mod3,...,modn 互质。

接下来以求如下同余方程组为例:

{ x ≡ 2 ( m o d 3 ) x ≡ 3 ( m o d 5 ) x ≡ 2 ( m o d 7 ) \begin{cases} x \equiv 2 \pmod{3} \\ x \equiv 3 \pmod{5} \\ x \equiv 2 \pmod{7} \end{cases} x2(mod3)x3(mod5)x2(mod7)

先求如下三个方程组:

( 1 )    { x ≡ 1 ( m o d 3 ) x ≡ 0 ( m o d 5 ) x ≡ 0 ( m o d 7 ) ( 2 )    { x ≡ 0 ( m o d 3 ) x ≡ 1 ( m o d 5 ) x ≡ 0 ( m o d 7 ) ( 3 )    { x ≡ 0 ( m o d 3 ) x ≡ 0 ( m o d 5 ) x ≡ 1 ( m o d 7 ) (1) \; \begin{cases} x \equiv 1 \pmod{3} \\ x \equiv 0\pmod{5} \\ x \equiv 0 \pmod{7} \end{cases} \quad (2) \; \begin{cases} x \equiv 0 \pmod{3} \\ x \equiv 1 \pmod{5} \\ x \equiv 0 \pmod{7} \end{cases} \quad (3) \; \begin{cases} x \equiv 0 \pmod{3} \\ x \equiv 0 \pmod{5} \\ x \equiv 1 \pmod{7} \end{cases} (1) x1(mod3)x0(mod5)x0(mod7)(2) x0(mod3)x1(mod5)x0(mod7)(3) x0(mod3)x0(mod5)x1(mod7)

( 1 ) ( 1 ) (1) 为例:

{ x ≡ 1 ( m o d 3 ) x ≡ 0 ( m o d 5 ) x ≡ 0 ( m o d 7 ) \begin{cases} x \equiv 1 \pmod{3} \\ x \equiv 0\pmod{5} \\ x \equiv 0 \pmod{7} \end{cases} x1(mod3)x0(mod5)x0(mod7)

因为 x ≡ 0 ( m o d 5 ) x ≡ 0 ( m o d 7 ) x \equiv 0\pmod{5} \quad x \equiv 0 \pmod{7} x0(mod5)x0(mod7) ,所以 x x x 35 35 35 的倍数,等同于求

35 y ≡ 1 ( m o d 3 ) ( x = 35 y ) 35 y \equiv 1 \pmod{3} (x=35y) 35y1(mod3)(x=35y)

等同于求

2 y ≡ 1 ( m o d 3 ) ( x = 35 y ) 2 y \equiv 1 \pmod{3} (x=35y) 2y1(mod3)(x=35y)

所以

x ≡ ( y = 2 ) × 35 ≡ 70 ( m o d ( 105 = 3 × 5 × 7 ) ) x \equiv (y = 2) \times 35 \equiv 70 \pmod{(105= 3 \times 5 \times 7)} x(y=2)×3570(mod(105=3×5×7))

所以解为:

( 1 ) = 70 ( 2 ) = 21 ( 3 ) = 15 (1)=70 \quad (2)=21 \quad (3)=15 (1)=70(2)=21(3)=15

同理,有:

( 1 )    { x ≡ 2 ( m o d 3 ) x ≡ 0 ( m o d 5 ) x ≡ 0 ( m o d 7 ) = 35 ( 2 )    { x ≡ 0 ( m o d 3 ) x ≡ 3 ( m o d 5 ) x ≡ 0 ( m o d 7 ) = 63 ( 3 )    { x ≡ 0 ( m o d 3 ) x ≡ 0 ( m o d 5 ) x ≡ 2 ( m o d 7 ) = 30 (1) \; \begin{cases} x \equiv 2 \pmod{3} \\ x \equiv 0\pmod{5} \\ x \equiv 0 \pmod{7} \end{cases} = 35 \quad (2) \; \begin{cases} x \equiv 0 \pmod{3} \\ x \equiv 3 \pmod{5} \\ x \equiv 0 \pmod{7} \end{cases} = 63 \quad (3) \; \begin{cases} x \equiv 0 \pmod{3} \\ x \equiv 0 \pmod{5} \\ x \equiv 2 \pmod{7} \end{cases} =30 (1) x2(mod3)x0(mod5)x0(mod7)=35(2) x0(mod3)x3(mod5)x0(mod7)=63(3) x0(mod3)x0(mod5)x2(mod7)=30

有:

{ x ≡ 2 ( m o d 3 ) x ≡ 3 ( m o d 5 ) x ≡ 2 ( m o d 7 ) = ( ( 1 ) + ( 2 ) + ( 3 ) )   m o d   105 = 128   m o d   105 = 23 \begin{cases} x \equiv 2 \pmod{3} \\ x \equiv 3 \pmod{5} \\ x \equiv 2 \pmod{7} \end{cases} =((1)+(2)+(3)) \bmod 105=128 \bmod 105 = 23 x2(mod3)x3(mod5)x2(mod7)=((1)+(2)+(3))mod105=128mod105=23

其中   m o d   105 \bmod 105 mod105 的原因是 x x x 可以同时去掉 3 , 5 , 7 3,5,7 3,5,7 使 x x x 更小,并且不会影响正确性。

C o d e Code Code

int China()
{
	int x,y,ans=0,M,N=1;
	for(int i=1; i<=n; i++)
	N*=mod[i];
	for(int i=1; i<=n; i++)
	{
		M=N/mod[i];
		exgcd(mod[i],M,x,y);//直接套模板。
		ans=(ans+(y*M*a[i])%N+N)%N;
	}
	if(a>0)return ans;
	else
	return ans+N;
}

逆元

思想

用于求 a × x ≡ 1 ( m o d b ) a \times x \equiv 1 \pmod{b} a×x1(modb) a , b a , b a,b 互质) 的 x x x , 称 x x x a a a 的逆元,记为 a − 1 a^{-1} a1

可用拓展欧几里得算法计算。

也可用费马定理计算。

费马定理: 若 a , p a,p a,p 互质且 p p p 为素数, a p − 1 ≡ 1 ( m o d p ) a^{p-1} \equiv 1 \pmod{p} ap11(modp)

还可用递推计算。

首先:

1 − 1 ≡ 1 ( m o d p ) 1^{-1} \equiv 1 \pmod{p} 111(modp)

p = k × i + r , r < i , 1 < i < p p=k\times i +r , r<i,1<i<p p=k×i+r,r<i,1<i<p

k × i + r ≡ 0 ( m o d p ) k\times i+r \equiv 0 \pmod{p} k×i+r0(modp)

两边同乘上 i − 1 i^{-1} i1 , r − 1 r^{-1} r1

k × r − 1 + i − 1 ≡ 0 ( m o d p ) k \times r^{-1} + i^{-1} \equiv 0 \pmod{p} k×r1+i10(modp)

i − 1 ≡ − k × r − 1 ( m o d p ) i^{-1} \equiv -k \times r^{-1} \pmod{p} i1k×r1(modp)

i − 1 ≡ − p i × ( p   m o d   i ) − 1 ( m o d p ) i^{-1} \equiv - \dfrac{p}{i} \times (p \bmod i)^{-1} \pmod{p} i1ip×(pmodi)1(modp)

C o d e Code Code

long long exgcd_inv(long long a,long long mod)
{
	long long d,x,y;
	d=exgcd(a,n,x,y);
	return d==1?(x+n)%n:-1;
}

long long fermat_inv(long long a,long long mod)
{
	return pow_mod(a,mod-2,mod);
}

inv[i]=-(p/i)*inv[p%i];

威尔逊定理

p p p 为素数,则 ( p − 1 ) ! ≡ − 1 ( m o d p ) (p-1)! \equiv -1 \pmod{p} (p1)!1(modp) 。 若 ( p − 1 ) ! ≡ − 1 ( m o d p ) (p-1)! \equiv -1 \pmod{p} (p1)!1(modp) 为素数,则 p p p #

费马定理

a , p a,p a,p 互质且 p p p 为数, a p − 1 ≡ 1 ( m o d p ) a^{p-1} \equiv 1 \pmod{p} ap11(modp)

费马小定理

p p p 为素数, a p ≡ a ( m o d p ) a^{p} \equiv a \pmod{p} apa(modp)

未完待续…

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值