摘要: 扩展欧几德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;我们也就找到了方程的一个解。 若gcd(a,b)=1,且x0,y0为a*x+b*y=n的一组解,则该方程的任一解可表示为:x=x0+b*t,y=y0-a*t;且对任一整数t,皆成立。(这个证明比较简单,就不写了) 这样我们就可以求出方程的所有解了,但 阅读全文
posted @ 2013-04-12 17:51 heity 阅读(194) 评论(0) 推荐(0)
摘要: 扩展欧几里德算法代码: 1 #include <cstdio> 2 #include <iostream> 3 4 using namespace std; 5 6 long long gcd_x(long long a,long long b) 7 { 8 if(b == 0) return a; 9 else10 return gcd_x(b,a%b);11 }12 13 long long judge(long long a,long long b,long long &x,long long &y)14 {15 if(b == 0)16 {... 阅读全文
posted @ 2013-04-12 16:35 heity 阅读(195) 评论(0) 推荐(0)