상세 컨텐츠

본문 제목

< 백준 BaekJoon : 13241번 최소공배수> C++

C++/Baekjoon

by J2on 2024. 1. 10. 23:38

본문

문제

https://www.acmicpc.net/problem/13241

 

13241번: 최소공배수

정수 B에 0보다 큰 정수인 N을 곱해 정수 A를 만들 수 있다면, A는 B의 배수이다. 예: 10은 5의 배수이다 (5*2 = 10) 10은 10의 배수이다(10*1 = 10) 6은 1의 배수이다(1*6 = 6) 20은 1, 2, 4,5,10,20의 배수이다. 다

www.acmicpc.net

 

코드

#include <iostream>
using namespace std;

void swap(long long int &numA, long long int &numB) {
  int temp = numA;
  numA = numB;
  numB = temp;
}

long long int findGcd(long long int numA, long long int numB) {
  int numC; // 나머지
  while (1) {
    numC = numA % numB;

    if (numC == 0)
      break;

    swap(numA, numB);
    numB = numC;
  }

  return numB;
}

long long int findLcd(long long int numA, long long int numB,
                      long long int numGcd) {
  long long int result = numA * numB / numGcd;
  return result;
}

int main() {
  long long int numA, numB;

  cin >> numA >> numB;
  if (numB > numA) {
    swap(numA, numB);
  }

  long long int numGcd = findGcd(numA, numB);
  long long int numLcd = findLcd(numA, numB, numGcd);
  cout << numLcd;
}

 

최대공약수를 먼저 찾고, 이를 바탕으로 최소공배수를 만들기

 

이 방법이 어렵다면 유클리드 호제법을 찾아 보시길

관련글 더보기

댓글 영역