一、同余
定义
当
两
个
整
数
a
,
b
除
以
同
一
个
正
整
数
m
,
若
得
相
同
余
数
,
则
二
整
数
同
余
。
记
为
:
a
≡
b
(
m
o
d
m
)
当两个整数a,b除以同一个正整数m,若得相同余数,则二整数同余。记为:a \equiv b(\mod m)
当两个整数a,b除以同一个正整数m,若得相同余数,则二整数同余。记为:a≡b(modm)
公式
- 若 m > 1 , 且 m ∣ ( a − b ) , 则 a ≡ b ( m o d m ) 若m>1,且m|(a-b),则a \equiv b(\mod m) 若m>1,且m∣(a−b),则a≡b(modm)
- 若 a ≡ b ( m o d m ) , c ∗ m = a − b , m ∣ ( a − b ) 若 a \equiv b(\mod m),c*m = a-b,m|(a-b) 若a≡b(modm),c∗m=a−b,m∣(a−b)
- 模 运 算 ( 不 含 除 法 ( 同 理 ) , 以 加 法 为 例 ) : ( a + b ) % m = ( a % m + b % m ) % m 模运算(不含除法(同理),以加法为例):(a+b)\% m = (a\% m + b\% m)\%m 模运算(不含除法(同理),以加法为例):(a+b)%m=(a%m+b%m)%m
取余的应用
- 处 理 具 有 周 期 性 的 问 题 ( 日 期 , 年 份 , 圈 ) , 一 维 矩 阵 到 二 维 矩 阵 的 转 换 处理具有周期性的问题(日期,年份,圈),一维矩阵到二维矩阵的转换 处理具有周期性的问题(日期,年份,圈),一维矩阵到二维矩阵的转换
- 题 目 答 案 较 大 , 一 般 会 将 处 理 高 精 度 问 题 转 换 为 取 模 来 处 理 , 如 1 e 9 + 7 题目答案较大,一般会将处理高精度问题转换为取模来处理,如1e9+7 题目答案较大,一般会将处理高精度问题转换为取模来处理,如1e9+7
二、欧拉定理
定义
若
m
,
a
互
质
(
g
c
d
(
a
,
m
)
=
1
)
,
则
a
ϕ
(
m
)
≡
1
(
m
o
d
m
)
若m,a互质(gcd(a,m) = 1),则a^{\phi(m) } \equiv1(\mod m)
若m,a互质(gcd(a,m)=1),则aϕ(m)≡1(modm)
证明:
首 先 , 把 1 到 m 中 与 m 互 质 的 数 挑 出 来 为 x 1 , x 2 , . . . , x ϕ ( m ) , 设 p 1 = a x 1 , p 2 = a x 2 , . . . , p ϕ m = a x ϕ ( m ) , 这 两 个 集 合 在 模 m 基 础 上 是 同 一 个 集 合 ( 下 面 给 出 证 明 ) 。 首先,把1到m中与m互质的数挑出来为x_1,x_2,...,x_{\phi (m)},设p_1 = ax_1,p_2 = ax_2,...,p_{\phi{m}} = ax_{\phi (m)},这两个集合在模m基础上是同一个集合(下面给出证明)。 首先,把1到m中与m互质的数挑出来为x1,x2,...,xϕ(m),设p1=ax1,p2=ax2,...,pϕm=axϕ(m),这两个集合在模m基础上是同一个集合(下面给出证明)。
- 引 理 1 、 p 集 合 元 素 两 两 模 m 不 同 余 , x 集 合 两 两 模 m 不 同 余 引理1、p集合元素两两模m不同余,x集合两两模m不同余 引理1、p集合元素两两模m不同余,x集合两两模m不同余
- 反 证 法 : 若 p i ≡ p j ( m o d m ) , 则 m ∣ ( p j − p j ) ( i ≠ j ) , m ∣ a ( x 1 − x 2 ) , 因 为 m , a 互 质 , 所 以 m ∣ ( x 1 − x 2 ) , x 1 − x 2 不 可 能 是 m 的 倍 数 ( 它 不 能 等 于 0 ) , 矛 盾 反证法:若p_i\equiv p_j(\mod m),则m|(p_j-p_j)(i\neq j),m|a(x_1-x_2),因为m,a互质,所以m|(x_1-x_2),x_1-x_2不可能是m的倍数(它不能等于0),矛盾 反证法:若pi≡pj(modm),则m∣(pj−pj)(i=j),m∣a(x1−x2),因为m,a互质,所以m∣(x1−x2),x1−x2不可能是m的倍数(它不能等于0),矛盾
- 引 理 2 、 p 集 合 元 素 都 与 m 互 质 引理2、p集合元素都与m互质 引理2、p集合元素都与m互质
- 反 证 法 : 若 p i = k m + r ( g c d ( k , r ) > 1 ) , p i − k m = r , a x i − k m = r , 根 据 裴 蜀 定 理 得 到 , x i 是 r 的 倍 数 ( 这 不 太 会 证 明 , 到 这 里 就 矛 盾 了 反证法:若p_i = km+r(gcd(k,r)>1),p_i-km=r,ax_i-km=r,根据裴蜀定理得到,x_i是r的倍数(这不太会证明,到这里就矛盾了 反证法:若pi=km+r(gcd(k,r)>1),pi−km=r,axi−km=r,根据裴蜀定理得到,xi是r的倍数(这不太会证明,到这里就矛盾了
- 通 过 上 面 的 引 理 , 把 集 合 p 所 有 元 素 乘 一 起 , 得 a ϕ ( m ) ∏ 1 < = i < = ϕ m x i ≡ ( ∏ 1 < = i < = ϕ m x i m o d m ) , 则 a ϕ ( m ) ≡ 1 ( m o d m ) 通过上面的引理,把集合p所有元素乘一起,得a^{\phi {(m)}}\prod_{1<=i<=\phi {m}} x_i \equiv (\prod_{1<=i<=\phi {m}} x_i \mod m),则a^{\phi(m) } \equiv1(\mod m) 通过上面的引理,把集合p所有元素乘一起,得aϕ(m)∏1<=i<=ϕmxi≡(∏1<=i<=ϕmximodm),则aϕ(m)≡1(modm)
三、费马小定理
若
p
是
质
数
(
p
>
1
)
,
对
于
任
意
整
数
a
,
a
p
−
a
是
p
的
倍
数
,
则
a
p
≡
(
a
m
o
d
p
)
若p是质数(p>1),对于任意整数a,a^p-a是p的倍数,则a^p\equiv(a\mod p)
若p是质数(p>1),对于任意整数a,ap−a是p的倍数,则ap≡(amodp)
证明
一
、
若
a
,
p
互
质
,
质
数
p
的
欧
拉
函
数
为
p
−
1
,
由
欧
拉
定
理
得
a
p
−
1
≡
1
(
m
o
d
p
)
,
则
a
p
≡
(
a
m
o
d
p
)
一、若a,p互质,质数p的欧拉函数为p-1,由欧拉定理得a^{p-1}\equiv1(\mod p),则a^{p}\equiv(a\mod p)
一、若a,p互质,质数p的欧拉函数为p−1,由欧拉定理得ap−1≡1(modp),则ap≡(amodp)
二
、
若
a
,
p
不
互
质
,
则
a
为
p
的
倍
数
,
那
么
p
∣
a
p
−
a
,
则
a
p
≡
a
(
m
o
d
p
)
二、若a,p不互质,则a为p的倍数,那么p|a^p-a,则a^p\equiv a(\mod p)
二、若a,p不互质,则a为p的倍数,那么p∣ap−a,则ap≡a(modp)
结论
- 可 以 看 出 费 马 小 定 理 是 欧 拉 定 理 的 特 殊 情 况 可以看出费马小定理是欧拉定理的特殊情况 可以看出费马小定理是欧拉定理的特殊情况
- a , p 互 质 , p 为 质 数 , 费 马 小 定 理 求 逆 元 , 由 a p − 1 ≡ ( a m o d p ) , 得 a 在 模 m 下 的 逆 元 , a p − 2 ( m o d p ) a,p互质,p为质数,费马小定理求逆元,由a^{p-1}\equiv(a\mod p),得a在模m下的逆元,a^{p-2}(modp) a,p互质,p为质数,费马小定理求逆元,由ap−1≡(amodp),得a在模m下的逆元,ap−2(modp)
- 有 时 候 质 数 特 别 大 , 用 这 两 个 定 理 取 模 计 算 有时候质数特别大,用这两个定理取模计算 有时候质数特别大,用这两个定理取模计算
四、扩展欧几里得算法
4.1裴蜀定理
对
于
任
意
整
数
a
,
b
,
必
存
在
整
数
x
,
y
,
满
足
a
x
+
b
y
=
g
c
d
(
a
,
b
)
对于任意整数a,b,必存在整数x,y,满足ax+by=gcd(a,b)
对于任意整数a,b,必存在整数x,y,满足ax+by=gcd(a,b)
证明:
在
欧
几
里
得
最
后
一
步
,
得
出
一
个
解
x
=
1
,
y
=
0
满
足
a
∗
1
+
0
∗
0
=
g
c
d
(
a
,
0
)
.
在
它
前
面
几
步
,
b
>
0
,
g
c
d
(
a
,
b
)
=
g
c
d
(
b
,
a
m
o
d
b
)
,
假
设
有
x
,
y
满
足
b
∗
x
+
(
a
m
o
d
b
)
∗
y
=
g
c
d
(
b
,
a
m
o
d
b
)
=
g
c
d
(
a
,
b
)
,
b
∗
x
+
(
a
m
o
d
b
)
∗
y
=
b
∗
x
+
(
a
−
[
a
b
]
∗
b
)
∗
y
=
a
y
+
b
(
x
−
[
a
b
]
∗
y
)
,
则
x
′
=
y
,
y
′
=
x
−
[
a
b
]
∗
y
,
则
a
x
′
+
b
y
′
=
g
c
d
(
a
,
b
)
,
所
以
一
定
有
解
x
0
,
y
0
在欧几里得最后一步,得出一个解x=1,y=0满足a*1+0*0=gcd(a,0).在它前面几步,b>0,gcd(a,b) = gcd(b,a\mod b),假设有x,y满足b*x+(a \mod b)*y=gcd(b,a\mod b) = gcd(a,b),b*x+(a \mod b)*y =b*x+(a-[{a\over b}]*b)*y=ay+b(x-[{a\over b}]*y),则x'=y,y'=x-[{a\over b}]*y,则ax'+by'=gcd(a,b),所以一定有解x_0,y_0
在欧几里得最后一步,得出一个解x=1,y=0满足a∗1+0∗0=gcd(a,0).在它前面几步,b>0,gcd(a,b)=gcd(b,amodb),假设有x,y满足b∗x+(amodb)∗y=gcd(b,amodb)=gcd(a,b),b∗x+(amodb)∗y=b∗x+(a−[ba]∗b)∗y=ay+b(x−[ba]∗y),则x′=y,y′=x−[ba]∗y,则ax′+by′=gcd(a,b),所以一定有解x0,y0
裴 蜀 定 理 是 由 欧 几 里 得 算 法 的 思 路 证 明 的 , 这 个 求 解 x , y 的 思 路 叫 做 扩 展 欧 几 里 得 算 法 裴蜀定理是由欧几里得算法的思路证明的,这个求解x,y的思路叫做扩展欧几里得算法 裴蜀定理是由欧几里得算法的思路证明的,这个求解x,y的思路叫做扩展欧几里得算法
代码如下:
int exgcd(int a,int b,int& x,int& y){
if(!b){
x = 1,y = 0;
return a;
}
int d = exgcd(b,a%b,x,y);
int t = x;
x = y;
y = t - a/b*y;
return d;
}
拓展:
对
于
更
一
般
的
方
程
(
二
元
一
次
方
程
)
,
a
x
+
b
y
=
c
,
若
有
解
当
且
仅
当
g
c
d
(
a
,
b
)
∣
c
(
判
断
是
否
有
解
)
,
令
d
=
g
c
d
(
a
,
b
)
,
a
x
0
+
b
y
0
=
d
(
x
0
,
y
0
是
一
组
特
解
)
,
则
通
解
:
x
=
c
d
∗
x
0
+
b
d
∗
k
,
y
=
c
d
∗
y
0
−
a
d
∗
k
(
k
∈
Z
)
.
对于更一般的方程(二元一次方程),ax+by=c,若有解当且仅当gcd(a,b)|c(判断是否有解),令d=gcd(a,b),ax_0+by_0=d(x_0,y_0是一组特解),则通解:x={c\over d}*x_0+{b\over d}*k,y={c\over d}*y_0-{a\over d}*k(k \in \mathbb{Z}).
对于更一般的方程(二元一次方程),ax+by=c,若有解当且仅当gcd(a,b)∣c(判断是否有解),令d=gcd(a,b),ax0+by0=d(x0,y0是一组特解),则通解:x=dc∗x0+db∗k,y=dc∗y0−da∗k(k∈Z).
五、一元线性同余方程
形 如 a x ≡ ( b m o d m ) 的 方 程 , 根 据 同 余 定 义 , 可 得 m ∣ ( a x − b ) , 那 么 m y = a x − b , a x − m y = b , y 可 以 取 负 数 , 则 转 换 为 a x + m y = b , 若 b ∣ g c d ( a , m ) , 则 可 用 扩 展 欧 几 里 得 算 法 求 解 。 形如ax\equiv (b\mod m)的方程,根据同余定义,可得m|(ax-b),那么my=ax-b,ax-my=b,y可以取负数,则转换为ax+my=b,若b|gcd(a,m),则可用扩展欧几里得算法求解。 形如ax≡(bmodm)的方程,根据同余定义,可得m∣(ax−b),那么my=ax−b,ax−my=b,y可以取负数,则转换为ax+my=b,若b∣gcd(a,m),则可用扩展欧几里得算法求解。
六、逆元
定义
逆
元
是
数
论
中
的
倒
数
,
在
除
法
中
,
a
x
=
1
,
则
x
为
a
的
倒
数
。
在
数
论
中
,
若
a
x
≡
1
(
m
o
d
p
)
,
我
们
就
称
a
和
x
在
模
p
下
互
为
逆
元
,
记
为
x
=
i
n
v
(
a
)
.
这
样
的
x
有
很
多
个
逆元是数论中的倒数,在除法中,ax=1,则x为a 的倒数。在数论中,若ax\equiv 1(\mod p),我们就称a和x在模p下互为逆元,记为x=inv(a).这样的x有很多个
逆元是数论中的倒数,在除法中,ax=1,则x为a的倒数。在数论中,若ax≡1(modp),我们就称a和x在模p下互为逆元,记为x=inv(a).这样的x有很多个
逆元的作用
一
、
解
决
模
运
算
下
的
除
法
,
模
运
算
中
没
办
法
计
算
除
法
如
(
a
/
b
)
%
m
,
除
法
麻
烦
,
就
转
换
为
乘
法
(
因
此
引
入
逆
元
。
一、解决模运算下的除法,模运算中没办法计算除法如(a/b)\% m,除法麻烦,就转换为乘法(因此引入逆元。
一、解决模运算下的除法,模运算中没办法计算除法如(a/b)%m,除法麻烦,就转换为乘法(因此引入逆元。
二
、
避
免
高
精
度
的
运
算
和
溢
出
,
一
般
会
对
大
质
数
p
取
余
来
输
出
答
案
二、避免高精度的运算和溢出,一般会对大质数p取余来输出答案
二、避免高精度的运算和溢出,一般会对大质数p取余来输出答案
求逆元方法一、扩展欧几里得算法
由 a x ≡ 1 ( m o d p ) , a x + p y = 1 , 1 ∣ g c d ( a , p ) , 当 g c d ( a , p ) = 1 , 可 以 得 出 一 个 解 x , 为 a 模 p 的 逆 由ax\equiv 1(\mod p),ax+py=1,1|gcd(a,p),当gcd(a,p)=1,可以得出一个解x,为a模p的逆 由ax≡1(modp),ax+py=1,1∣gcd(a,p),当gcd(a,p)=1,可以得出一个解x,为a模p的逆
代码如下:
int exgcd(int a,int b,int& x,int& y){
if(!b){
x = 1,y = 0;
return a;
}
int d = exgcd(b,a%b,x,y);
int t = x;
x = y;
y = t - a/b*y;
return d;
}
int inv(int a, int p)
{
int x, y;
if (exgcd(a, p, x, y) != 1) // 无解的情形
return -1;
return (x % p + p) % p;//为了保证x不为负数
}
求逆元方法二、费马小定理加快速幂
若
p
为
质
数
,
且
g
c
d
(
a
,
p
)
=
1
,
则
有
a
p
−
1
≡
1
(
m
o
d
p
)
若p为质数,且gcd(a,p) = 1,则有a^{p-1}\equiv 1(\mod p)
若p为质数,且gcd(a,p)=1,则有ap−1≡1(modp)
再
根
据
逆
元
定
义
推
导
,
得
a
∗
i
n
v
(
a
)
≡
a
p
−
1
≡
(
1
m
o
d
p
)
,
则
i
n
v
(
a
)
≡
a
p
−
2
(
m
o
d
p
)
。
再根据逆元定义推导,得a*inv(a)\equiv a^{p-1}\equiv(1\mod p),则inv(a)\equiv a^{p-2}(\mod p)。
再根据逆元定义推导,得a∗inv(a)≡ap−1≡(1modp),则inv(a)≡ap−2(modp)。
代码如下:
int qpow(int a,int b,int p){
int res = 1%p;
while(b){
if(b&1) res = (ll)res*a%p;
a=(ll)a*a%p;
b>>=1;
}
return res;
}
int inv(int a,int p){
return qpow(a,p-2,p);
}
3120

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



