手算逆元及手动模拟扩展欧几里得算法及思路推导

一上午的一个小推导
先给出exgcd的代码吧

int exgcd(int a, int b, int &x, int &y)
{ ///x,y起初不知道,是递归往上求解x,y
    if (b == 0)
    {
        x = 1, y = 0;
        return a;///两处return 
    }
    int d = exgcd(b, a % b, x, y);
    int tmp = x;
    x = y, y = tmp - (a / b) * y;
    return d;///记得要返回d啊
    ///【a*x+b*y=1中,x是a在模b下的逆元,y是b在模a下的逆元】
    ///【若a*x+b*y=c有解,则有gcd(a,b)|c】
}

这种是更加精简的,在源代码基础上稍微改动了一下

int Exgcd(int a, int b, int &x, int &y)
{
    if (b == 0)
    {
        x = 1, y = 0;
        return a;
    }
    int d = Exgcd(b, a % b, y, x);
    y = y - a / b * x; ///新式exgcd
    return d;
}

这是推导思路及手算逆元的两种方式
在这里插入图片描述
这是手动模拟递归过程
在这里插入图片描述
无独有偶,在2022.05.14凌晨我复习现代密码学中,碰到AES加密算法中在GF(2^8)上求多项式的乘法逆 的时候,上述表格法(我在此称为WTC法)同样也适用于求多项式的乘法逆,注意此时要在GF(2^8)上取模,而且加法、乘法注意都是异或,即同假异真
在这里插入图片描述
为此,今🌃我兴奋不已
撒花★,°:.☆( ̄▽ ̄)/$:.°★

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WTcrazy _

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值