[プログラマ]最大公倍数と最小公倍数


最大公倍数と最小公倍数
問題の説明
2つの数を入力し、2つの数の最大公約数と最小公約数の関数を返し、解を完了します.アレイの先頭にある最大公約数、次に最小公約数を返します.例えば、2つの数3および12の最大承諾数は3であり、最小公倍数は12であるため、ソリューション(3、12)は[3、12]を返さなければならない.
プール設計
一般に,最大公約数を求めるためには,小因数の分解が考えられる.
与えられた2つの数を素数分解した後,共通の素数を見つければ最大の公約数を求めることができる.しかし,この方法の数が大きいほど小数因数の分解は困難である.
別の方法では、ユークリッド湖製法を考えることができます.
(a>=bの場合)aをbで割った余りをrと呼ぶ.aとbの最大承諾数を(a,b)と呼ぶと、以下の条件が成立する.
(a, b) = (b, r)
例えば、a=1071、b=1029の場合、最大承諾数を求める.
(1071, 1029) = (1029, 42) = (42, 21) = (21, 0) = 21
21は2つの数の最大公約数です.
解法
function gcd(minnum, maxnum) {
  return minnum % maxnum === 0 ? maxnum : gcd(maxnum, minnum % maxnum);
}

function lcm(minnum, maxnum) {
  return (minnum * maxnum) / gcd(minnum, maxnum);
}

function solution(n, m) {
  const answer = [];

  answer.push(gcd(Math.max(n, m), Math.min(n, m)));
  answer.push(lcm(Math.max(n, m), Math.min(n, m)));

  return answer;
} 
ここにいるよmaxを書く理由はminnum%maxnumの結果とmaxnum%minnumの結果が違うからです.
でもMathMaxとMath.minに変えても結果は同じです.
私が無視したのはシェアが小数点ではないことです.例えば、3%12のシェアは0.2ではなく0であり、残りは3であり、12%3のシェアと等しい.
だから必ずMathMaxとMath.分で計算する必要はありません.
function gcd(minnum, maxnum) {
  return minnum % maxnum === 0 ? maxnum : gcd(maxnum, minnum % maxnum);
}

function lcm(minnum, maxnum) {
  return (minnum * maxnum) / gcd(minnum, maxnum);
}

function solution(n, m) {
  const answer = [];

  answer.push(gcd(n, m));
  answer.push(lcm(n, m));

  return answer;
}