2023. 6. 30. 01:05ㆍ백준 문제와 소스 코드
문제:
두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.
입력:
첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.
출력:
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
예제 입력1:

예제 출력1:

코드:
#include<iostream>
using namespace std;
int main()
{
int a, b; //처음 받을 두 정수 선언
cin >> a >> b; //두 정수 입력 받기
int temp,temp1,temp2; //임의로 저장할 변수 선언
int rst;
temp1 = a; //temp1에 a를 저장
temp2 = b; //temp2에 b를 저장
if (a >= b) //a가 b보다 크거나 같으면
{
while (b != 0) //b가 0일 때까지
{
temp = b; //b를 temp에 저장
b = a % b; //b에 나머지 저장
a = temp; //a에 temp(=b) 저장
}
rst = a;
}
else //a가 b보다 작을 경우 (반대로)
{
while (a != 0)
{
temp = a;
a = b % a;
b = temp;
}
rst = b;
}
cout << rst<<endl; //rst(GCD) 출력
rst = (temp1 / rst) * temp2; //rst에 최소공배수를 구하는 식 활용
cout << rst; //rst(LCM) 출력
return 0;
}
설명:
최대공약수 (GCD)를 구하는 방법으로 유클리드 알고리즘을 사용하였다.
유클리드 알고리즘
임의의 두 자연수 a, b가 주어졌을때. 둘 중 큰 값이 a라고 가정해보겠다
a를 b로 나눈 나머지를 n 이라고 하면 (a%b = n) n이 0일때, b가 최대공약수(GCD)이다.
만약 n이 0이 아니라면, a에 b값을 다시 넣고 n를 b에 대입 한 후 다시 위에 step2부터 반복하면 된다.
이후 최소공배수(LCM)는, 각각의 수에서 최대공약수로 나온 수들을 곱하고, 다시 최대공약수를 1번 곱하면
최소공배수가 나온다.
'백준 문제와 소스 코드' 카테고리의 다른 글
| Week 1 (수학) - 문제 17087번 (숨바꼭질 6 ) (0) | 2023.07.01 |
|---|---|
| Week 1 (수학) - 문제 11653번 (소인수분해) (0) | 2023.06.30 |
| Week 1 (수학) - 문제 1978번 (소수 찾기) (1) | 2023.06.29 |
| Week 1 (수학) - 문제 1929번 (소수 구하기) - 미완 (0) | 2023.06.29 |
| Week 1 (수학) - 문제 8393번 (합) (0) | 2023.06.29 |