差分

ナビゲーションに移動 検索に移動

ユークリッドの互除法

756 バイト追加, 2014年9月11日 (木) 16:25
編集の要約なし
'''ユークリッドの互除法'''とは、2個の正の([[英語]]:euclidean algorithm)とは、2個の正の[[整数]]の[[最大公約数]]を比較的高速に求める[[アルゴリズム]]である。
==実装例==
===シンプルな実装C言語===[[C言語]]によるシンプルな実装。
<source lang="c">
int gcd(int a,int b) { return b==0?a:gcd(b,a%b);
}
</source>
===再帰を使わない実装===C言語による[[再帰]]を使わない実装。
<source lang="c">
int gcd(int a,int b) { if(a<=0 || b<=0){ return 0; } while(0 < b>0) { int t=a%b; a=b; b=t; } return a;
}
</source>
===Haskellによる実装例===[[Haskell]]による実装===で書くとこんな感じである。
<source lang="haskell">
gcd a b = if b<=0 then a else gcd b (mod a b)
</source>
 
===OCamlによる実装例===
[[OCaml]]で書くとこんな感じである。
<source lang="ocaml">
let rec gcd a = function
| 0 -> a
| b -> gcd b (a mod b);;
</source>
 
===F#による実装例===
[[F Sharp|F#]]で書くとこんな感じである。
F#は[[OCaml]]から派生した[[プログラミング言語]]なのでほとんど違いはない。
僅かな違いは[[除算]]が「mod」ではなく「%」なくらいである。
<source lang="fsharp">
let rec gcd a = function
| 0 -> a
| b -> gcd b (a % b);;
</source>
匿名利用者

案内メニュー