逆元知识详解

1.逆

求解一般形式的同余方程 ax≡b( mod m)ax\equiv b(\bmod m)axb(modm),需要用到逆(Inverse)。

逆的概念

给定整数aaa,且满足gcd⁡(a,m)=1\gcd(a,m)=1gcd(a,m)=1,称 ax≡1( mod m)ax\equiv1(\bmod m)ax1(modm) 的一个解为 aaammm 的逆,记为 a−1a^{-1}a1
例如,8x≡1( mod 31)8x\equiv1(\bmod 31)8x1(mod31),有一个解是x=4x = 4x=4444888313131 的逆。所有解,如35,6635,6635,66 等,都是 888313131 的逆。
可以借助丢番图方程理解逆的概念,8x≡1( mod 31)8x\equiv1(\bmod 31)8x1(mod31) 即方程8x+31y=1,x=48x + 31y=1,x = 48x+31y=1x=4888313131 的逆,4×8−14\times8 - 14×81 能整除313131
从逆的要求gcd⁡(a,m)=1\gcd(a,m)=1gcd(a,m)=1可以看出,做竞赛题时,模 mmm 最好是一个大于aaa 的素数,才能保证 gcd⁡(a,m)=1\gcd(a,m)=1gcd(a,m)=1

2.求逆

有多种方法可以求逆。

1)扩展欧几里得算法求单个逆

下面的例题是求逆,即求解同余方程 ax≡1( mod m)ax\equiv1(\bmod m)ax1(modm)

例题1 同余方程(求逆)(洛谷 P1082)

问题描述:求关于 x 的同余方程ax≡1( mod max\equiv1(\bmod max1(modm) 的最小正整数解。2≤a,m≤20000000002\leq a,m\leq20000000002a,m2000000000

ax≡1( mod m)ax\equiv1(\bmod m)ax1(modm),即丢番图方程ax+my=1ax + my = 1ax+my=1,先用扩展欧几里得算法求出ax+my=1ax+my = 1ax+my=1的一个特解 x0x_0x0,通解是 x=x0+mnx = x_0+mnx=x0+mn。然后通过取模操作计算最小整数解(x0 mod m+m) mod m(x_0\bmod m + m)\bmod m(x0modm+m)modm,因为 m>0m>0m>0,可以保证结果是正整数。

long long mod_inverse(long long a, long long m){ //求逆
    long long x, y;
    extend_gcd(a, m, x, y);
    return (x % m + m) % m;                     //保证返回最小正整数
}
int main(){
    long long a, m;  cin >> a >> m;
    cout << mod_inverse(a, m);
    return 0;
}

下面给出一道类似的习题。

例题2 C looooops(poj 2115)

问题描述:C 语言的循环语句 for(variable=A;variable!=B;variable+=C)for(variable = A; variable != B; variable += C)for(variable=A;variable!=B;variable+=C),当 variable==Bvariable == Bvariable==B 时结束循环。A、B、C 的数据类型的长度是 kkk 位,也就是说,当 variablevariablevariable 超过 kkk 位时,只保留 kkk 位,相当于对 2k2^k2k取模。给出 A、B、CA、B、CABCkkk,判断循环是否能在有限次内结束,若能结束,则输出循环次数。

设循环次数为 xxx(A+Cx) mod 2k=B(A + Cx)\bmod{2^k}=B(A+Cx)mod2k=B,这是同余方程 Cx=(B−A) mod 2kCx=(B - A)\bmod{2^k}Cx=(B

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值