初等数论 --- 同余、欧拉定理、费马小定理、求逆元
发布日期:2021-05-08 02:59:11 浏览次数:22 分类:原创文章

本文共 7830 字,大约阅读时间需要 26 分钟。

文章目录

一、同余

定义
当 两 个 整 数 a , b 除 以 同 一 个 正 整 数 m , 若 得 相 同 余 数 , 则 二 整 数 同 余 。 记 为 : a ≡ b ( m o d    m ) 当两个整数a,b除以同一个正整数m,若得相同余数,则二整数同余。记为:a \equiv b(\mod m) a,bmab(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(ab)ab(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) ab(modm),cm=ab,m(ab)
  • 模 运 算 ( 不 含 除 法 ( 同 理 ) , 以 加 法 为 例 ) : ( 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基础上是同一个集合(下面给出证明)。 1mmx1,x2,...,xϕ(m),p1=ax1,p2=ax2,...,pϕm=axϕ(m)m()

  • 引 理 1 、 p 集 合 元 素 两 两 模 m 不 同 余 , x 集 合 两 两 模 m 不 同 余 引理1、p集合元素两两模m不同余,x集合两两模m不同余 1pmxm
  • 反 证 法 : 若 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),矛盾 pipj(modm),m(pjpj)(i=j),ma(x1x2),m,am(x1x2)x1x2m0
  • 引 理 2 、 p 集 合 元 素 都 与 m 互 质 引理2、p集合元素都与m互质 2pm
  • 反 证 法 : 若 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),pikm=r,axikm=r,xir
  • 通 过 上 面 的 引 理 , 把 集 合 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) paϕ(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)aapapap(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) appp1,ap11(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,pappapa,apa(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) appap1(amodp),amap2(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,xyax+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=0a1+00=gcd(a,0).b>0,gcd(a,b)=gcd(b,amodb),x,ybx+(amodb)y=gcd(b,amodb)=gcd(a,b),bx+(amodb)y=bx+(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)cd=gcd(a,b),ax0+by0=d(x0,y0),x=dcx0+dbk,y=dcy0dak(kZ).

五、一元线性同余方程

形 如 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(axb),my=axbaxmy=byax+my=bbgcd(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=1xaax1(modp),axpx=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的逆 ax1(modp)ax+py=1,1gcd(a,p),gcd(a,p)=1,xap

代码如下:

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) pgcd(a,p)=1,ap11(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)。 ainv(a)ap1(1modp)inv(a)ap2(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);}
上一篇:Pytho基础入门
下一篇:初等数论知识 --- 筛素数、欧拉函数

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年03月23日 06时00分50秒