Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

EuclidProblem/차영권: Difference between revisions

From ZeroWiki
imported>Unknown
No edit summary
 
(Repair batch-0002 pages from live compare)
 
Line 12: Line 12:
  int X;
  int X;
  int Y;
  int Y;
  }coefficient[MAX];
  }coefficient[MAX];
   
   
  int gcd(int max, int min);
  int gcd(int max, int min);
Line 24: Line 24:
  int GCD, reminder;  
  int GCD, reminder;  
  GCD = gcd(a >= b ? a : b, a <= b ? a : b);
  GCD = gcd(a >= b ? a : b, a <= b ? a : b);
  coefficient[0].X = 0; coefficient[0].Y = 1;
  coefficient[0].X = 0; coefficient[0].Y = 1;
  reminder = a%b;
  reminder = a%b;
  while (reminder != 0)
  while (reminder != 0)
  {
  {
  coefficient[i].X = 1;
  coefficient[i].X = 1;
  coefficient[i++].Y = -a/b;
  coefficient[i++].Y = -a/b;
  reminder = a%b;
  reminder = a%b;
  a = b; b = reminder;
  a = b; b = reminder;
Line 36: Line 36:
  for (j=1 ; j<i-1 ; j++)
  for (j=1 ; j<i-1 ; j++)
  {
  {
  coefficient[j+1].X = coefficient[j+1].Y * coefficient[j].X + coefficient[j-1].X;
  coefficient[j+1].X = coefficient[j+1].Y * coefficient[j].X + coefficient[j-1].X;
  coefficient[j+1].Y = coefficient[j+1].Y * coefficient[j].Y + coefficient[j-1].Y;
  coefficient[j+1].Y = coefficient[j+1].Y * coefficient[j].Y + coefficient[j-1].Y;
  }
  }
  cout << coefficient[j-1].X << " " << coefficient[j-1].Y << " " << GCD << endl;
  cout << coefficient[j-1].X << " " << coefficient[j-1].Y << " " << GCD << endl;
  }
  }
  return 0;
  return 0;
Line 53: Line 53:
==== 나한테 할 말 ====
==== 나한테 할 말 ====
----
----

Latest revision as of 00:16, 27 March 2026

소감

2005/04/03 Accepted 0:01.818 440 유클리드 호제법과 디오판토스 방정식에 대해 공부해 볼 수 있는 좋은 기회였다고 생각한다.

코드

// Euclidean.cpp
#include <iostream.h>

#define MAX 50

struct Coefficient {
	int X;
	int Y;
}coefficient[MAX];

int gcd(int max, int min);

int main()
{
	int a, b;
	while (cin >> a >> b)
	{
		int i = 1, j;
		int GCD, reminder; 
		GCD = gcd(a >= b ? a : b, a <= b ? a : b);
		coefficient[0].X = 0;		coefficient[0].Y = 1;
		reminder = a%b;
		while (reminder != 0)
		{
			coefficient[i].X = 1;
			coefficient[i++].Y = -a/b;
			reminder = a%b;
			a = b; b = reminder;	
		}
		// X, Y값을 계산한다
		for (j=1 ; j<i-1 ; j++)
		{	
			coefficient[j+1].X = coefficient[j+1].Y * coefficient[j].X + coefficient[j-1].X;
			coefficient[j+1].Y = coefficient[j+1].Y * coefficient[j].Y + coefficient[j-1].Y;
		}
		cout << coefficient[j-1].X << " " << coefficient[j-1].Y << " " << GCD << endl;
	}
	return 0;
}

int gcd(int max, int min)
{
	if (max%min == 0)
		return min; 
	else
		return gcd(min, max%min);
}

나한테 할 말