码迷,mamicode.com
首页 > 其他好文 > 详细

最小乘法正逆元

时间:2015-04-22 01:51:02      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

也就是著名的扩展欧几里得正解。

nn‘+mm‘= d

有整数解时候d|gcd(n,m).

而扩展欧几里得求出来的n‘ m‘可能为负数。并且即使是正数也不一定是最小的正数解。

这里有。根据同余定理。

首先nn‘+mm‘= d

即 nn‘-m(-m‘) = d  式子1

对于nn‘  ≡ d (mod m)  

nn‘ - km = d 类比式子1 。也就是说k = -m‘ 时。

式子1可以弄成 nn‘  ≡ d (mod m)   这样的同余式。

也就是求n‘满足 nn‘ mod  m = d

已知 n0‘ 是用扩展欧几里得解出来一个解。

那么。n (n‘ + - m)  mod m = d   + - 代表可加可减。

那么。 我们求得n‘ 可以通过加减m 可以变化到最小正数解。 你也许怀疑有更小的值加减或者变化区度更小的使得我们加减m是得不到的。但是仔细观察和思考一下。是不会的。

 而这种变化可以有以下代码实现:

技术分享
#include<stdio.h>
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        if(n<0)
        {
            printf("%d\n",(n)%3+3);
        }
        else
        {
            printf("%d\n",(n)%3);
        }
    }

}
View Code

 

最小乘法正逆元

标签:

原文地址:http://www.cnblogs.com/Milkor/p/4446088.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!