定义
当 两 个 整 数 a , b 除 以 同 一 个 正 整 数 m , 若 得 相 同 余 数 , 则 二 整 数 同 余 。 记 为 : a ≡ b ( m o d m ) 当两个整数a,b除以同一个正整数m,若得相同余数,则二整数同余。记为:a \equiv b(\mod m) 当两个整数a,b除以同一个正整数m,若得相同余数,则二整数同余。记为:a≡b(modm)
公式
取余的应用
定义
若 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基础上是同一个集合(下面给出证明)。
若 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 , 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);
}