摘要: 题目链接:http://poj.org/problem?id=1061 对于方程 a*x+b*y=n;有整数解得充分必要条件是(n %gcd(a,b)==0).这个定理这里就不证明了,数论书上都有。 所以方程 a*x+b*y=n;我们可以先用扩展欧几里德算法求出一组x0,y0。也就是a*x0+b*y0=gcd(a,b);然后两边同时除以gcd(a,b),再乘以n。这样就得到了方程 a*x0*n/gcd(a,b)+b*y0*n/gcd(a,b)=n;我们也就找到了方程的一个解。即x=x0*n/gcd(a,b) ;y=y0*n/gcd(a,b). 还有一个定理:若gcd(a,b)=1,且x0,y. 阅读全文
posted @ 2012-02-24 15:58 我们一直在努力 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 转载自笨小孩_shw 哎呀,经过这两三天的奋斗,终于搞懂了一类问题——用扩展欧几里德算法求解线性同余方程。其实这类问题应该是比较基础也比较简单的,但我由于几乎没有一点数论的基础,所以还是难为了我不久,等现在彻底搞明白以后再看真的觉得是挺简单的,有关这类问题的题目也不是很多,我就做了3个。下面把这类问题的资料整理一下,方便以后再看。欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) 证明:a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,... 阅读全文
posted @ 2012-02-24 14:49 我们一直在努力 阅读(220) 评论(0) 推荐(0) 编辑