최대공약수와 최소공배수

문제 설명

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

 

제한 사항

  • 두 수는 1이상 1000000이하의 자연수입니다.

 

입출력 예

n m return
3 12 [3, 12]
2 5 [1, 10]

 

Python

def solution(n, m):
    min_ = min(n, m)
    while min_ > 0:
        if(n % min_ == 0 and m % min_ == 0) :
            common_max = min_;
            break
        min_ = min_-1
        
    return [common_max, common_max * (n / common_max)* (m / common_max)]

 

JavaScript

function solution(n, m) {
    var measureN = [];
    var measureM = [];
    
    for(let i = 1; i <= n; i++)
        if(n % i === 0) measureN.push(i);
    for(let i = 1; i <= m; i++)
        if(m % i === 0) measureM.push(i);
    measureN.sort((a,b) => b-a);
    measureM.sort((a,b) => b-a);

    let max = 0;
    while(max < measureN.length){
        if(measureM.indexOf(measureN[max]) != -1){
            max = measureN[max];
            break;
        }           
        max++
    }
    return max === 1 ? [1, n*m] : [max, max*(n/max)*(m/max)];
}
function solution(n, m) {
    let min = Math.min(n, m);
    let common_max = 1;
    while(min > 0){
        if(n % min === 0 && m % min === 0){
            common_max = min;
            break;
        }
        min--;
    }

    return [common_max, common_max * (n / common_max)* (m / common_max)];
}

 

C++

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> solution(int n, int m) {
    int min_ = min(n, m);
    int common_max = 1;
    while(min_ > 0){
        if(n % min_ == 0 && m % min_ == 0){
            common_max = min_;
            break;
        }
        min_--;
    }
    return vector<int>{common_max, common_max * (n / common_max)* (m / common_max)};
}
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기