More actions
imported>Unknown No edit summary |
(Repair batch-0002 pages from live compare) |
||
| Line 9: | Line 9: | ||
using namespace std; | using namespace std; | ||
long Eucl(long, long); | long Eucl(long, long); | ||
long xy | long xy[2][2] = {{0,0},{0,1}}; | ||
int main(void){ | int main(void){ | ||
long a, b, gcd; | long a, b, gcd; | ||
| Line 20: | Line 20: | ||
gcd = Eucl(a,b); | gcd = Eucl(a,b); | ||
if(isSwap==true) | if(isSwap==true) | ||
swap(xy | swap(xy[1][0],xy[1][1]); | ||
cout << xy | cout << xy[1][0] << " " << xy[1][1] << " " << gcd <<"\n"; | ||
return 0; | return 0; | ||
} | } | ||
| Line 28: | Line 28: | ||
return b; | return b; | ||
long q = (a - a%b)/b; | long q = (a - a%b)/b; | ||
long tx = xy | long tx = xy[0][0], ty = xy[0][1]; | ||
xy | xy[0][0] = xy[1][0]; | ||
xy | xy[0][1] = xy[1][1]; | ||
if(tx==0 && ty==0){//첫시도라면 | if(tx==0 && ty==0){//첫시도라면 | ||
xy | xy[1][0] = 1, xy[1][1] = q*-1; //첫함수진입에서 a의 계수는 언제나 1이다. | ||
} | } | ||
else{ | else{ | ||
xy | xy[1][0] = xy[0][0]*-1*q+tx; //이번함수의 몫q*-1을 곱하고 이전이전함수의 계수를 더한다. | ||
xy | xy[1][1] = xy[0][1]*-1*q+ty; | ||
} | } | ||
return Eucl(b, a%b); | return Eucl(b, a%b); | ||
| Line 42: | Line 42: | ||
==== 나한테 할 말 ==== | ==== 나한테 할 말 ==== | ||
---- | ---- | ||
Latest revision as of 00:16, 27 March 2026
소감
문제가 있길래 한번 도전해봤습니다. 참여하는데 다른 룰이 있는 것 인지 모르겠군요. 유클리드호제법을 까먹어서 고등학교 정석책을 참고 ^^ X, Y를 구하는 코드와 최대공약수를 구하는 코드를 합치는데 시간이 걸렸습니다.
코드
//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);
}