[#85][자격증] 정보처리기사 실기 알고리즘 (유클리드 호제법 최대공약수, 최소공배수)

정보처리기사 실기 알고리즘 (유클리드 호제법 최대공약수, 최소공배수)

두 수 A, B에 대한 최대 공약수와 최소 공배수를 유클리드 호제법으로 처리하려고 한다.

<처리 조건>
1. 순서도에 제시되어 있는 미완성 알고리즘을 분석하여, 가장 적합한 로직으로 연계되어 구현될 수 있도록 답안 선택 시 유의하시오.
2. 입력받는 두 수 A, B는 0이 아닌 서로 다른 양의 정수로 가정한다.
3. MOD()는 괄호 안의 연산을 수행하며 나머지를 구하는 함수이다.
ex) MOD(5/3) = 2, MOD(20/5) = 0
4. 기호 "/"는 나누기 연산, "*"는 곱하기 연산을 나타낸다. 




유사한 문제(https://dailyddubby.blogspot.kr/2018/03/19-n.html)

----------------------------정답----------------------------------
① HIGH = B
② R
③ LOW
④ LOW = R
⑤ A * B
-------------------------------------------------------------------


▶유클리드 호제법?
a, b (a>b)
a%b==0 이면 최대공약수는 b
a%b!=0이면 a=b, b = a%b

gcd(a,b)라는 함수가 있을 때
a%b==0이면 return b;
a%b!=0이면 return gcd(b, a%b);
//최대공약수
long long gcd(long long a, long long b){
    return a%b==0 ? b : gcd(b, a%b);
}
cs

▶최소공배수 구하기
   a * b = 최대공약수 * 최소공배수
   최소공배수 = (a * b) / 최대공약수

C++구현
#include <iostream>
using namespace std;
int main(){
    int HIGH, LOW, L, A, B, R = 1;
    cin >> A >> B;
    if (A > B) {
        HIGH = A;
        LOW = B;
    }
    else {
        LOW = A;
        HIGH = B;
    }
    while (R > 0) {
        R = HIGH % LOW;
        HIGH = LOW;
        LOW = R;
    }
    //최소공배수
    L = (A*B) / HIGH;
    cout << HIGH << " " << L << endl;
    return 0;
}
cs

댓글

가장 많이 본 글