문제
두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.
출력
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
방법 1. 1씩 증가/감소하면서 최소공배수/최대공약수 찾기
#include <iostream>
using namespace std;
int main()
{
int a,b, s1, s2;
cin >> a >> b;
if(a>b){
s1 = b;
s2 = a;
}else{
s1 = a;
s2 = b;
}
for(int i=s1; i>0; i--){
if(a%i==0 && b%i==0){
printf("%d\n", i);
break;
}
}
for(int i=s2; i<987654321; i++){
if(i%a==0 && i%b==0){
printf("%d\n", i);
break;
}
}
return 0;
}
방법 2. 유클리드 호제법을 이용하여 최대공약수/최소공배수 찾기
#include <iostream>
using namespace std;
int get_gcd(int a, int b){
int mod;
while(b){
mod = a % b;
a = b;
b = mod;
}
return a;
}
int get_lcm(int a, int b, int gcd){
return a * b / gcd;
}
int main()
{
int a,b,gcd,lcm;
cin >> a >> b;
gcd = get_gcd(a,b);
lcm = get_lcm(a,b,gcd);
printf("%d\n%d",gcd, lcm);
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준] 10816 숫자 카드 2 c++ (0) | 2022.02.08 |
---|---|
[백준] 9012번 괄호 c++ (0) | 2022.02.06 |
[백준] 1920번 수 찾기 c++ (0) | 2022.02.04 |
[백준] 1259번 팰린드롬수 c++ (0) | 2022.02.04 |
[백준] 2475번 검증수 c++ (0) | 2022.02.04 |