最小乘法正逆元(扩展欧几里德解的分布)

众所周知逆元是由扩展欧几里得算法得来的。

可是经由扩展欧几里德算法算出来的解。只是一个特解。

我们实际生活中往往需要这些解集中的一个最小正解。又或者有某个式子来描绘整个解集的状态。

在这里我们有一个这样的式子。

对于方程nn'+mm'=t

已知n',m'为该方程的一组特解。

那么解集组为:(n'+m/d,m'-n/d).其中d = gcd(n,m)

那么对于计算乘法逆元:(n'+m,m'-n).

 

我们首先来证明当(n',m')为方程解的时候。

(n'+m/d,m'-n/d)确实为方程的解。

因为nn'+mm'=t

所以n(n'+m/d)+m(m'-n/d)=nn'+nm/d+mm'-mn/d = nn'+mm' = t 成立。

 

接下来证明其最小性。

因为水平有限。这个也许我描述也许不会特别清楚。望见谅。

我们要求最小当然需要的是最小的整数添量。

我们首先只考虑一个变量。n' (假如一个变量的最小整数添量为m/d。那么当然就可以直接对应的m'所更变的量。因为是对应的。)

nn' + mm' = t 可以看作同余式。

nn' ≡ t (mod m)

即 nn' mod m = t mod m. 

令 g = t mod m .

那么 nn' mod m = g

我们令n'加上m/d.

n(n'+m/d) = nn'+nm/d  (再提醒一次d =  gcd(n,m))

(nn'+nm/d) mod m = nn' mod m 这是显然的。从这里我们也可以看出(n'+m/d,m'-n/d)确实为方程的解。

笼统地讲nm/d mod m = 0

即我们要构造出来的增量乘上n之后一定是m的倍数。knm.

我们自然会想到最小增量是m/n 因为m/n*n = m 而m是最小的m的倍数。(废话,也许不能称作倍数)

可是你有考虑过。是最小整数增量嘛?注意整数。所以自然而然地 m/gcd(n,m) 才是最小整数增量。

因此当我们计算出n'的时候。要转换成最小的正整数解。

设 q = m/gcd(n,m)

n'+kq>0

如果n'>0

n' = n'%q

如果n'<0

n ' = n'%q + q

即可。

总结是: n' = (n'%q+q)%q.

注意题设。有可能n' = 0要特判。

实际上我们往往求的不是n'。而是nn'。那么对于nn'。的解集会如何分布呢?

设。x =  nn'. X 为 x 的解集。

X =  n(n'+k*m/gcd(n,m)) = nn'+k*m*n/gcd(n,m) = nn' + k*lcm(n,m).

其中nn'为一个解集中的一个解。

这个X解集也是很有用的。在求中国剩余定理的时候。求最小正整数X满足同余线性方程组的时候。即会用到。

 

转载于:https://www.cnblogs.com/Milkor/p/4446088.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值