競技プログラミングの問題を解いている際に、最小公倍数か最大公約数を求める必要に迫られる場合がある。
今までは、先人らのコードをコピペして使わせて頂いていたのだが、モラル的に良くない気がしたので自分用に書いたため、貼っておく。
型などlongの方が良いかも。
最大公約数はユークリッドの互除法より得られ、また最小公倍数は元の2数をかけて最大公約数で割ったものから得られる。
9,18の場合...最大公約数は9,これらをかけて9で割るので18が最小公倍数となる。
// 最大公約数publicstaticintGcd(inta,intb){varx=0;while(true){// 割り切れたらif(a%b==0){returnb;}else{x=a%b;a=b;b=x;}}}// 最小公倍数publicstaticintLcm(inta,intb){varx=Gcd(a,b);returna*b/x;}
呼び出し方としては、こんな感じで(適当にMain関数の中で呼んだけど)指定してあげてね。
usingSystem;publicstaticvoidMain(){vara=10;varb=20;Console.WriteLine(Gcd(a,b));Console.WriteLine(Lcm(a,b));}