반응형
int get_gcd(int u, int v)
{
int temp = 0;
while(u)
{
if(u < v)
{
temp = u; u = v; v = temp;
}
u = u - v;
}
return v;
}
유클리드 알고리즘
GCD(280, 30) = GCD(250, 30)
= GCD(220, 30)
= GCD(190, 30)
... 이런 식으로 큰 수에서 작은수를 계속해서 빼 나간다.
= GCD(40, 30)
= GCD(10, 30) // 이렇게 앞의 수가 뒤의 수보다 작아지면 두 수를 교환
= GCD(30, 10)
... 다시 반복해서 빼 나간다.
= GCD(20, 10)
= GCD(10, 10)
= GCD(0, 10) // 앞의 수가 뒤의 수보다 작아졌기 때문에 두 수를 교환
= GCD(10, 0) // 뒤의 수가 0이 되면 앞의 수가 최대 공약수
// 이것이 최대 공약수 구하는 유클리드 알고리즘 원리
여기에서 작아질때 까지 빼는 내용이 반복되므로 이 과정을 % 연산자를 이용해서 한번으로 줄이면
int get_gcd(int u, int v)
{
int temp = 0;
while(v)
{
temp = u % v;
u = v;
v = temp;
}
return u;
}
로 더 간단하게 표현할 수 있다.
반응형
'C > Study' 카테고리의 다른 글
[C] 값 입력할 때마다 메모리 할당 (0) | 2024.12.20 |
---|---|
[C] 리본 모양 출력 (조건문 하나만 사용) (0) | 2024.12.18 |
[C] scanf() 함수의 입력 형식 기호 (0) | 2024.12.16 |
[C] 제어문자 (0) | 2024.12.16 |
[C] fopen()에 쓰이는 파일 오픈 모드 종류 (0) | 2024.12.16 |