小学生でも出来る公約数、公倍数ですが、この算数をコンピュータに教えることが出来るでしょうか。
今回は、プログラミングコンテスト第3回のテーマ「分数計算」において必須となる「公約数」について勉強してみましょう。
挑戦したくても「どうしてよいのやら」と、
糸口が掴めない素人プログラマに贈り物を差し上げる目的で管理人(志)が筆を起こす気持ちになったのです。
数が特定の数で割り切れるとき、特定の数を約数といいます。2つの数において共通の約数を持つ場合それを公約数といい、
その最大のものを最大公約数といいます。
分数の分子、分母を簡単なものに直すときに使われる算数の技術です。
小学生でも知っていることを高校生に向かって説明する必要は無いのですが、
コンピュータプログラミングをする人はパソコンにこの技術を教えなければなりません。
そこで、数学を使って、この公約数を研究してみましょう。
2つの数を X、Y としましょう。X、Y に公約数 m があるとします。このとき、次の関係式が成立します。
X = m・x ・・・(1) Y = m・y ・・・(2) Z = X − Y = m(x − y)・・・(3)
このとき、Z = X − Y の値はどのような数になるのでしょうか?
Zも 「同じ公約数 m を持つ」 か、または 「ゼロ」 のどちらかになることは明らかです。
これを使えば公約数を簡単に求めることができます。
そこで、上で説明した「引き算した結果は同じ公約数をもつ」 を使って、実際に公約数を求めて見ましょう。 一つの例として次の2つの数で手順を説明してみましょう。1961 と 1484 の二つの数です。
最後に一致した数値が公約数になります。 もし、最後に一致した数が1であったときは公約数が無かったということになります。
この方法は、ユークリッド幾何学の名前で有名な古代ギリシアの数学者ユークリッド(BC330?〜BC275)により
発明され、ユークリッドの「互除法」といわれる有名な 「公約数を求める方法」 です。
上の例ではその手順通りに行ったもので、人間的ではありません。
人間がする場合、後半部分では53の整数倍を一気に引くようにします。
コンピュータと人間の違いは、「要領よく」、「巧みな判断」などに出てきます。
コンピュータは 「アホ」 ですから、余計な判断をさせるより、
「バカ正直」に単純な繰り返しをさせる方法の方が良いのです。
コンピュータは繰り返しの処理が大変得意な上に、人間と違って「退屈」、「邪魔くさい」はありません。
「やめなさい」 といわない限り真面目に根気よく単純な繰り返ししてくれます。
それに疲れを知らない上に、ミスをしません。
プログラムの上でも繰り返しの部分は1回分を書けばよいので全体の長さが短くて済みます。だから、プログラマは繰り返し処理を好んで使います。
今回はプログラムの実例を一切示しません。処理の構造を上の例から読み取って、自分の力でプログラムを完成してください。
分数の計算全体の手順では、最初に 「通分をし」、次に 「分子の足し算」 をする。
最後に、「分子と分母が公約数を持つ場合それを約分」 して、分数計算が終了です。
以上の処理をプログラミングすればよいのです。約分以外は簡単ですから、その手順を説明する必要はないでしょう。
挑戦者の健闘を祈ります。