一上午的一个小推导
先给出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)上取模,而且加法、乘法注意都是异或,即同假异真
为此,今🌃我兴奋不已
撒花★,°:.☆( ̄▽ ̄)/$:.°★ 。