최대공약수는 '유클리드 호제법'을 사용하여 구함!
1. x, y 중 큰수에서 작은수를 나누어 나머지를 구함
2. 1번에서 작은수가 이제 '큰 수' 가 되고 1번에서의 나머지가 작은수
3. 나머지가 0 이 될 때 까지 2번 과정 반복
4. 0이 됬을 때 마지막으로 나눈 값이 최대공약수
최소공배수는 1번에서 처음 x와 y를 곱한 값을 최대공약수로 나누면 된다!
코드
#include <iostream>
#include <stdlib.h>
using namespace std;
int gcd(int a, int b)
{
int n = 0;
while (1)
{
n = a % b;
if (n == 0) return b;
a = b;
b = n;
}
}
int main()
{
int a = 0, b = 0;
cin >> a >> b;
printf("최대공약수는 %d\n", gcd(a, b));
printf("최소공배수는 %d\n", (a*b) / gcd(a, b));
return 0;
}
'공부' 카테고리의 다른 글
| (프로그래머스)없는 숫자 더하기 (0) | 2021.10.06 |
|---|---|
| (프로그래머스)숫자 문자열과 영단어 (0) | 2021.10.06 |
| Dynamic Programming (0) | 2017.09.14 |
| (오일러 11번) 수평, 수직, 또는 대각선 방향으로 연속된 숫자 네 개의 곱 중 최대값은 얼마입니까? (0) | 2017.09.12 |
| (오일러 10번) 이백만 이하 소수의 합 (0) | 2017.09.06 |
댓글