소ê°� ¶
2005/03/31 Accepted 0:01.820 436
ì˜ˆì „ì—� ì •ìˆ˜ë¡ ì±…ì—�서 본 ìœ í�´ë¦¬ë“œ ì•Œê³ ë¦¬ì¦˜ì�˜ ì�‘ìš©ë¬¸ì œì�´ë‹¤. AX + BY = GCD ì—�서 gcd와 x, y 구하는 법ì�„ 문보창페ì�´ì§€ì—� ì›�래 ê°€ì§€ê³ ìžˆì—ˆê¸° 때문ì—� 단순한 copy&paste로 ë¬¸ì œë¥¼ í’€ 수 있었다.
ì˜ˆì „ì—� ì •ìˆ˜ë¡ ì±…ì—�서 본 ìœ í�´ë¦¬ë“œ ì•Œê³ ë¦¬ì¦˜ì�˜ ì�‘ìš©ë¬¸ì œì�´ë‹¤. AX + BY = GCD ì—�서 gcd와 x, y 구하는 법ì�„ 문보창페ì�´ì§€ì—� ì›�래 ê°€ì§€ê³ ìžˆì—ˆê¸° 때문ì—� 단순한 copy&paste로 ë¬¸ì œë¥¼ í’€ 수 있었다.
코드 ¶
~cpp
// no10104 - Euclid Problem
#include <iostream>
#include <cmath>
using namespace std;
int gcd(int p, int q, int & x, int & y);
int main()
{
int a, b;
int x, y;
int g; // gcd
while (cin >> a >> b)
{
g = gcd(a, b, x, y);
cout << x << " " << y << " " << g << endl;
}
return 0;
}
int gcd(int p, int q, int & x, int & y)
{
int x1, y1; // ì�´ì „계수
int g; // gcd
if (p < q) return (gcd(q, p, y, x));
if (q == 0)
{
x = 1;
y = 0;
return p;
}
g = gcd(q, p%q, x1, y1);
x = y1;
y = (x1 - floor(p/q) * y1);
return g;
}










