关于乘法逆元

本文深入探讨了数论中的逆元概念,包括加法和乘法逆元的定义及计算方法,并通过AES密码体系的字节替代过程展示了逆元在实际应用中的重要性。此外,文章还提供了一个实例,说明如何利用逆元解决模运算中的除法问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数论弱渣学习中,勿喷。。。。

百度百科

数论中的逆元

在模运算中,
加法单位元是0,因为(0+a) mod m = a mod m;
乘法单位元是1,因为(1×a) mod m = a mod m
定义 对a∈Zm,存在b∈Zm,使得a+b ≡ 0 (mod m),则b是a的加法逆元,记b= - a。
定义 对a∈Zm,存在b∈Zm,使得a×b ≡1 (mod m),则称b为a的乘法逆元。
逆元在密码学中有广泛应用,AES密码体系的字节替代就是运用了逆元。
具体计算逆元时,计算加法逆元的方法是很显然的。而对于乘法逆元:在mod m的操作下(即Zm中),a存在乘法逆元当且仅当a与m互质。不定方程ab+mx=1的任意一组整数解(b,x),b就是a的乘法逆元。具体计算可以使用扩展欧几里德算法(Extended-GCD)。

数论的题目中用到逆元的话主要就是乘法逆元了

一个小小的例子

在一连串的加减乘除中有 (a/b)%mod 这样的东东,直接除肯定会错,因为a已经是取模后的结果了

做法是这样的:

(a/b)%mod
let a=b*k
a%mod   = b*k %mod
a/b%mod = k % mod;
=> k%mod <=> b*inverse(b) * k % mod

b * inverse(b) 与 1 同余
问题转换成a*inverse(b) % mod;
即求b对mod的乘法逆元

转换一下:
b*x%mod = 1;
b*x = y*mod + 1;
b*x - mod*y = 1;

这个式子其实就可以看出b 与 mod 应该互质
exgcd 解方程求最小正整数解即可

int exgcd(int a,int b,int &x,int &y)
{
    if(b==0) {x=1;y=0;return a;}
    else 
    {
        int d=exgcd(b,a%b,x,y);
        int t=x;
        x=y;
        y=t-a/b*y;
        return d;
    }
}
int inverse(int num,int mod)
{
    int x,y;
	exgcd(num,mod,x,y);
	while(x<0) x+=mod,y-=num;
	return x;
}


ps:下面的还没有详细去证明。。。。

其实如果P是质数的时候可以用费马小定理来做,即

a*b^(mod-2)//这个比较常用

p不是质数的时候是

a*b^(phi(mod)-1)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值