【C#】最大公約数と最小公倍数と比率を求める

スポンサーリンク

あぁぁ!ブログ書くモチベーションがぁぁぁぁ!!(心の声)
おふざけはここまでにして、今回は下記3つを求める方法を紹介していきたい。
最大公約数】【最小公倍数】【比率

知っていると思うけど

まずは単語の意味合いを紹介。

最大公約数(さいだいこうやくすう)とは

2つ以上の自然数に共通する約数(公約数)

例えば、
12での割り切れる自然数は(1,2,3,4,6,12)
18での割り切れる自然数は(1,2,3,6,9,18)
この時、12と18の約数は(1,2,3,6)となります。
約数の中で一番大きい数字(最大公約数)は『』です。

最小公倍数(さいしょうこうばいすう)とは

2つ以上の自然数の公倍数の最小値です。
※倍数とは、ある数を整数倍したもの、公倍数は2つ以上の整数に共通する倍数

例えば、
12の倍数と18の倍数で共通しているのは、「36の倍数」になります。
36の倍数(36,72,108,…)は、[12]でも[18]でも割り切れる事になります。
この時、一番最小の自然数(最小公倍数)は「36」となります。

比率(ひりつ)とは

ある数値と他の数値との関係を示す割合

たとえば、
クラスの生徒が男子12人、女子18人の時の男女の比率を求めようと思います。
12と18の比率を求める時、先ほどの最大公約数(6)で両方の数字を割ります。
すると、2と3になり、12と18の比率は「2:3である事が分かります。
比率では、別に整数である必要はないので、「1:1.5」でも間違いではありません。
この時は、男子に対して女子が1.5倍いるクラスだという事が分かりますね。

求める計算式は?

最大公約数

最大公約数は、「ユークリッドの互除法」という方法を用いて算出する事が出来る。
言葉を覚える必要はないが、どんな方法かと言うと、
2つの数字(大きい数字から小さい数字)を割って、余りが0になるまで小さい数字(割った数字)と余りを割り続ける」って方法だっっ!

先ほどの「12」と「18」で例えると、
「18÷12=1…」まだ余りが0ではないので
12÷=2…0」になる。
ここでの最後に割った数字が最大公約数になるという方法である。

最小公倍数

最小公倍数を出すためには、先に最大公約数を求める必要がある。
2つの数字をかけて、最大公約数で割った数字」が最小公倍数になるのだ。

さきほどの「12」と「18」で例えてみると、
「12×18÷(最大公約数[6])」が最小公倍数になる。
これを計算してもらうと分かると思うが「36」となる。

比率

比率を求めるためには、先に最大公約数を求める必要がある。
2つの数字を最大公約数でそれぞれ割った数字」となる。

さきほどの「12」と「18」で例えてみると、
「12÷(最大公約数[6])」「18÷(最大公約数[6])」をした結果が比率「2:3」になる。

プログラムを作成する。

最大公約数

今回は、関数のみの紹介とする。
最大公約数を英語で書くと[greatest common divisor]
頭文字をとって関数名は「GCD」とする。

private int GCD(int a,int b)
{
    //自然数ではないといけない
    a = Math.Abs(a);
    b = Math.Abs(b);

    //大きい数字と小さい数字を入れ替える
    //簡単だけど再帰処理
    if (a < b)
    {
        return GCD(b, a);
    }

    //下記実際の処理
    while(b != 0)
    {
        int remain = a % b;
        a = b;
        b = remain;
    }

    return a;
}

ここで注意をしてほしい事がある。
それは、『自然数ではいけない』という事である。
なので、引数の型を[uint]にするか今回のように[絶対値]をとるようにするとよい。

最小公倍数

最大公約数を求めたので後は簡単です。
最小公倍数を英語で「least common multiple
頭文字をとって関数名は「LCM」にします。

private int LCM(int a,int b)
{
    return a * b / GCD(a, b);
}

比率

最大公約数を求めたので後は簡単です。
比率を英語で「ratio」
関数名は「RTO」にします。

private static void RTO(int a, int b)
{
    int ratioA = a / GCD(a, b);
    int ratioB = b / GCD(a, b);

    //比率を表示
    Console.WriteLine(a + "と" + b + "の比率は、");
    Console.WriteLine(ratioA + ":" + ratioB);

    return;
}

この関数を実行してみたら、

おぉぉ問題なさそう!!

まとめ

今回は、『最大公約数』『最小公倍数』『比率』をC#でどうやって求めるかのサンプルの関数を紹介しました。
簡単にまとめると「ユークリッドの互除法」を使って最大公約数を求めればOKって事になりますw
どちらかと言うと、比率を求めたい場面に出くわす機会があるような気がします。
その時に、この記事を参考にしてもらえたら嬉しいです。

コメント

タイトルとURLをコピーしました