【算法】 初等数论 一些总结
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)中的精妙代码
接下来是人人都能看出来的废话时间
由最终推导式可看出原来的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)
就当又是来水博客的吧
扩展欧里几德
其实是将刘汝佳的紫书和林厚从的《数学一本通》稍稍总结了一下。毕竟一个是“数学归纳法”“此处略去”, 一个是代码硬是写了十几行
然而要是看过的话应该都能总结出来,但我就是要写...
首先是林厚从的《数学一本通》(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)
相关文章推荐
- 【算法】 初等数论 一些总结
- 【算法】 初等数论 一些总结
- linux内核使用的一些算法和思想(个人总结)
- 对于矩阵类型的一些算法的总结(一)
- 初等数论总结(填坑)
- 一些算法的总结
- qgy总结的一些算法
- 一些常见算法复杂度总结
- 刷ACM题自己总结的一些算法
- 转加解密算法的一些概述总结
- 一些算法及题目总结
- 开始了,开始了,因为一些原因,开始复习算法以及总结一下工作,很好
- 夜深人静写算法(五)- 初等数论
- 【初等数论】【转载】夜深人静写算法(五) - 初等数论
- 总结 一些 SQL Server 中的时间算法
- 《算法竞赛-训练指南》第二章-数论常用算法总结
- A*算法的一些总结
- 做算法题编程时的一些总结
- 初等数论零散总结
- IGD indicator演化算法的一些小总结