const fs = require('fs');
const [a, b] = fs.readFileSync("/dev/stdin").toString().trim()
.split(' ').map(Number) ;
const solution = (a, b) => {
const prime = Object.keys(primeObj(a*b))
let [pA, pB] = [primeObj(a), primeObj(b)]
let max = 1
prime.forEach(el => {
if(pA[el] && pB[el]){
pA[el] > pB[el] ?
max *= el**pB[el] : max *= el**pA[el]
}
})
return max + '\n' + a*b/max
}
const primeObj = num => {
let i = 2
let obj = {}
while(num >= i){
if(num % i === 0){
obj[i] = ( obj[i] || 0 ) + 1
num /= i
}else{
i++
}
}
return obj
}
console.log(solution(a, b))
primeObj
를 선언한다. primeObj
에 넣어 반환된 객체를 pA, pB 라고 한다.max
를 만들려면 pA와 pB에 모두 존재하는 요소를 가장 작은 것 제곱수만큼 곱하면 된다.primeObj
에 넣어 객체 prime을 만들었다.a*b/max
이다.const fs = require('fs');
const [a, b] = fs.readFileSync("/dev/stdin").toString().trim()
.split(' ').map(Number) ;
const solution = (a,b) => {
const smaller = Math.min(a, b);
for (let i = smaller; i > 0; i--) {
if (a % i === 0 && b % i === 0) {
return i +'\n'+ a * b / i
}
}
}
console.log(solution(a,b));
최대공약수 i
는 smaller
이하의 자연수 중 a, b에 모두 나누어 떨어지는 최대값이다.
최소공배수는 a * b / i
이다.