~cpp //Euclid Problem/이동현 2005.04.03 #include <iostream> using namespace std; long Eucl(long, long); long xy[2][2] = {{0,0},{0,1}}; int main(void){ long a, b, gcd; cin >> a >> b; bool isSwap = false; if(a<b){ //a는 무조건 큰수를 넣는다. isSwap = true; swap(a, b); } gcd = Eucl(a,b); if(isSwap==true) swap(xy[1][0],xy[1][1]); cout << xy[1][0] << " " << xy[1][1] << " " << gcd <<"\n"; return 0; } long Eucl(long a, long b){ //a가 큰수. a=bq+r공식을 변형 r=a-qb 을 이용하여 a,b의 계수 계산 if(a%b == 0) return b; long q = (a - a%b)/b; long tx = xy[0][0], ty = xy[0][1]; xy[0][0] = xy[1][0]; xy[0][1] = xy[1][1]; if(tx==0 && ty==0){//첫시도라면 xy[1][0] = 1, xy[1][1] = q*-1; //첫함수진입에서 a의 계수는 언제나 1이다. } else{ xy[1][0] = xy[0][0]*-1*q+tx; //이번함수의 몫q*-1을 곱하고 이전이전함수의 계수를 더한다. xy[1][1] = xy[0][1]*-1*q+ty; } return Eucl(b, a%b); }