C言語のきほん「ユークリッドの互除法」

スポンサーリンク
プログラミング C言語

今回は、「ユークリッドの互除法によって最大公約数」を求めるプログラムである。

ユークリッドの互除法は、二つの整数値の最大公約数を再帰的に求めるアルゴリズムである。

なお、本プログラムは、Windows 11 Home(23H2)上で、 Visual Studio Code(1.88.1)を使用して作成し、gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 でコンパイルしている。

C言語のインストールについてはこちらをご参照ください。↓

ユークリッドの互除法によって最大公約数を求めるプログラム

//ユークリッドの互除法によって最大公約数を求めるプログラム

#include <stdio.h>

//整数値x,yの最大公約数を返却する
int gcd(int x,int y)
{
    if (y == 0)
        return x;
    else
        return gcd(y,x % y);
}

int main(void)
{
    int x,y;

    puts("二つの整数の最大公約数を求めます。");

    printf("整数を入力してください:"); scanf("%d",&x);
    printf("整数を入力してください:"); scanf("%d",&y);

    printf("最大公約数は%dです。\n",gcd(x,y));

    return 0;

}

実行結果

二つの整数の最大公約数を求めます。
整数を入力してください:22
整数を入力してください:8
最大公約数は2です。

二つの整数を長方形の2辺の長さとして、次のように考える。

長方形を正方形で埋めつくす。そのようにして作られる正方形の最大の辺の長さを求める

(例)22と8の最大公約数を求める。

1 図aの22cm×8cmの長方形を、短い辺の8cmの正方形に分割する。
 その結果、図bのように8cm×8cmの正方形が二つ埋まるが、8cm×6cmの長方形が残る。

2 残った8cm×6cmの長方形に対して、同じ手順の結果が図Cとなる。6cm×6cmの正方形が1個できて、6cm×2cmの長方形が残る。

3 残った6cm×2cmの長方形に対して、同じ手順の結果が図dとなる。2cm×2cmの正方形が3個埋まる。
→得られた最大公約数である。

この手続きを表現した関数が、gcd(x、y)である。(二つの整数xとyの最大公約数)

yが0であれば、x
そうでなければ、gcd(y,x % y)

参考)新・解きながら学ぶC言語 第2版 柴田望洋 (監修・著)、 由梨かおる(著)SBクリエイティブ

新・解きながら学ぶC言語 第2版
Amazonで購入できます↑(クリック)

コメント

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