google colabolatory⑫ 最大公約数を求めるアルゴリズム

【JavaScript】 最大公約数を求める

 

ユークリッドの互除法というのを勉強します。

Aを割られる数、Bを割る数とします。

A÷B = C ...  D

ここで、Cは商、Dは余りです。

次にすることは、

前回、割る数であったBを、割られる数とし、

前回の余りであるDを割る数とします。すなわち、

B÷D = E ... F

では次にすることは?

 

さてコードです。

%%js

function getGreatestCommonDivisionNumber(value1, value2){
  let r;
  a = value1;
  b = value2;

  do{
    r = a % b;
    a = b;
    b = r;
  }while(r!==0)

  return a;

}

console.log(getGreatestCommonDivisionNumber(824,1133));

 

JavaScriptなら、undefinedやnull値と0を比較しても異なっていれば、false判定になるので下記のようにも書けます。単純に理解するだけならこの方がよい。

%%js

function getGreatestCommonDivisionNumber(value1, value2){
  let r;
  a = value1;
  b = value2;

 while(r !== 0){
  r = a % b;
  a = b;
  b = r;
 }

  return a;

}

console.log(getGreatestCommonDivisionNumber(824,1133));

 

条件文(forやwhile, do while)は、三項演算子で書き換えが可能です。

 

上記HPでは、単なる三項演算子ではなく、中に再帰(リカーシブ)をいれてきてます。