(구)boymin
2623 : 최대공약수 구하기 본문
문제 설명 |
두 정수 a, b를 입력받아서, a, b의 최대공약수를 출력하시오. |
입력 |
정수 a, b가 공백으로 구분되어 입력된다. (1<=a, b<=10,000) |
출력 |
a, b의 최대공약수를 출력한다. |
입력 예시 |
64 128 |
출력 예시 |
64 |
최대공약수 구하기 문제.
'유클리드 호제법'이라고 널리 알려진 최대공약수를 구하는 알고리즘이 있다.
/*유클리드 호제법
: 두 양의 정수 a, b (b>a)에 대하여 b = aq + r (0<=r<a)라 하면, a, b의 최대공약수는 a,r의 최대공약수와 같다. */
인터넷에서 찾아보니 예시 코드들을 찾아볼 수 있었다.
예제 1)
int Euclidean(int a, int b)
{
return a%b ? Euclidean(b, a%b) : b;
}
/* 출처
예제 2)
#include <stdio.h>
int max(int a,int b);
int main (void)
{
int a,b;
printf("두 수를 입력 하시오");
printf("\n");
scanf("%d%d",&a,&b);
if(a>=b)
{
printf("\n");
printf("두 수의 최대공약수 : %d\n",max(a,b));
}
else
{
printf("\n");
printf("두 수의 최대공약수 : %d\n",max(b,a));
}
}
int max(int a,int b)
{
if(a%b==0) return b;
else return max(b,a%b);
}
/* 출처
찾아보니 상당히 많은 예시 코드들이 재귀함수로 이루어져 있었다.
재귀함수는 컴퓨터에 무리가 가므로 되도록 사용하지 않는것이 좋다는 얘기를 들어서
재귀함수 없이 유클리드 호제법을 이용한 코드를 짜보았다.
/* 참고 자료
'Programming > CodeUp' 카테고리의 다른 글
1167 : 두 번째로 작은 수 (0) | 2017.06.24 |
---|
Comments