您的位置:首页 > 其它

【算法】 初等数论 一些总结

2017-07-20 09:15 435 查看
然而实际上现在只有扩展欧里几德,也许之后会以此为据点(?)再写一些吧

就当又是来水博客的吧

扩展欧里几德

其实是将刘汝佳的紫书和林厚从的《数学一本通》稍稍总结了一下。

毕竟一个是“数学归纳法”“此处略去”, 一个是代码硬是写了十几行

然而要是看过的话应该都能总结出来,但我就是要写...

首先是林厚从的《数学一本通》(p10)中的逐步推出

为统一, 将其原文中的p, q替换为x, y

…… 因为gcd(a,b)=gcd(b,a%b),

所以有ax+by =gcd(a,b) =gcd(b,a%b) =bx+(a%b)y=bx+(a−a/b∗b)y=ay+(x−a/b∗y)b

然后是刘汝佳的紫书(p313)中的精妙代码

void gcd(int a, int b, int &d, int &x, int &y){
if (!b){ d = a; x = 1; y = 0;}
else {gcd(b, a % b, d, y, x); y -= x * (a/b);}
}


接下来是人人都能看出来的废话时间

由最终推导式可看出原来的x变成了y, y变成了(x - a / b * y)

x, y的改变是代码中互换的原因, 但由于y实际不是成了x而是(x - a / b * y)

所以在x, y递归互换后(此时的x是上一步的y, y同理)将y -= x * (a / b)

所以说啊,作者们沟通一下多吼!这是胡说

关于求其最小非负整数解

当然都知道怎么操作,但自己发现了原理中与缩系的一些联系

在转的这篇博客(也可以直接访问原博客)中受到的一些启发

关于这个内容,在所转博客中说得还可以,还加了小优化。但我也意外想到其与缩系的联系,就可以更加简单明了地解释了

扩展欧里几德求出来的只是一组特解,不能一定满足是最小非负整数解的情况

那我们就最好找到一个包含且仅包含最小非负整数解的范围,这样由于解是余数意义下的,我们就可以通过取模得到啦

先看条件为gcd(a,b)=1, 所求是ax≡c(modb) 中的x时的情况

缩系有性质

b的缩系中的每个元素乘以一个与b互质的数在mod b意义下仍为b的缩系,每个元素在操作前唯一对应操作后的一个元素

将a看作缩系中乘上的数,那么x就一定可以是b的缩系中的值,换言之可以使x∈[0,b),这样就一定是最小非负正整数解了,根据缩系性质此范围中也一定只有唯一解

那么gcd(a,b)=g的时候呢?同样的,我们希望b在经过一些操作后能有gcd(a,b)=1。可以想到其实b/g后就能满足条件(可用反证法,若a, b仍不互质,那么仍有的不为1的约数应在之前被乘入g中,矛盾)

那么x∈[0,b/g−1)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: