擴展gcd求解二元不定方程及其證明
阿新 • • 發佈:2017-05-13
std iostream 不定 article include %d content 及其 變形
#include <cstdio> #include <iostream> using namespace std; /*擴展gcd證明 由於當d = gcd(a,b)時; d = d1 = gcd(b,a%b); d1 = b1x1 + a%by1; d = ax+by = b1x1+a%by1。又由於a%b = a - a%b*b; 上式變形能夠有 b1x1 + (a-b*a/b)*y1 = a*y1 + b*(x1-a/b*y1); 也就是是說ax+by = a*y1 + b*(x1-a/b*y1); 所以當x=y1,y = x1-a/b*y1時。能夠滿足有d=ax+by; */ int fun(int a,int b,int d,int &x,int &y){ if(b == 0){ x = 1; y = 0; return a; } else{ d = fun(b,a%b,d,x,y); int t; t = x; x = y; y = t-a/b*y; return d; } } int main(){ int a,b,d; cin >>a >> b >> d; int x,y; fun(a,b,d,x,y); printf("%d %d\n",x,y); return 0; }
擴展gcd求解二元不定方程及其證明