Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

ユークリッドの互除法で最大公約数(GCD)を求めるC++プログラム

本記事では、2つの数の最大公約数(GCD: Greatest Common Divisor)を求めるための「ユークリッドの互除法」について解説します。ユークリッドの互除法を利用すれば、GCDを簡単かつ効率的に計算することが可能です。実装方法には大きく分けて反復型(ループ処理)再帰型の2つのアプローチがありますが、ここでは再帰的なユークリッドの互除法を取り上げます。

アルゴリズムの考え方

ユークリッドの互除法は、「2つの数のGCDは、一方を他方で割った余りと小さい方の数のGCDに等しい」という性質を利用します。具体的な流れは以下のとおりです。

  • a が 0 の場合、b がそのまま GCD となるため b を返す
  • それ以外の場合は、b を a で割った余りと a を引数として、自分自身を再帰的に呼び出す
  • 余りが徐々に小さくなっていき、最終的に GCD が求まる

疑似コード:EuclideanAlgorithm(a, b)

begin
    if a is 0, then
        return b
    end if
    return gcd(b mod a, a)
end

C++による実装例

#include<iostream>
using namespace std;

// ユークリッドの互除法によりGCDを求める再帰関数
int euclideanAlgorithm(int a, int b) {
    if (a == 0)                          // a が 0 なら b が GCD
        return b;
    return euclideanAlgorithm(b % a, a); // 余りと a で再帰呼び出し
}

main() {
    int a, b;
    cout << "Enter two numbers: ";       // 2つの数値を入力
    cin >> a >> b;
    cout << "GCD " << euclideanAlgorithm(a, b);
}

実行結果

Enter two numbers: 12 16
GCD 4

上記の例では、1216 を入力しています。16 を 12 で割ると余りは 4、次に 12 を 4 で割ると余りは 0 となるため、GCD は 4 と出力されます。

計算量について

ユークリッドの互除法の計算量は O(log(min(a, b))) であり、非常に高速なアルゴリズムです。入力値が大きくなっても少ないステップ数でGCDを求められるため、競技プログラミングや実務でも広く利用されています。

  1. 拡張ユークリッドの互除法を実装するPythonプログラム

    この記事では、以下の問題文に対する解決策について詳しく解説していきます。問題文2つの整数が与えられたとき、それらの最大公約数(GCD)を計算し、結果を表示するプログラムを作成してください。拡張ユークリッドの互除法とはGCD(最大公約数)とは、2つの数をどちらも割り切ることができる最大の整数のことです。ここではユークリッドの互除法を用いてGCDを計算します。この手法は、2つの数を繰り返し割り算を行い、余りが0になった時点で計算を停止するというものです。さらに本記事では、通常のユークリッドの互除法を拡張したアルゴリズムを扱います。拡張ユークリッドの互除法では、再帰処理の過程で得られる以前の値を利用

  2. Pythonで学ぶユークリッドの互除法:最大公約数(GCD)を求める基本プログラム

    はじめにこの記事では、以下の問題に対する解決策について詳しく解説していきます。問題の概要問題文: 2つの数値が与えられたとき、その最大公約数(GCD)を計算して表示します。GCD(Greatest Common Divisor:最大公約数)とは、2つの数をどちらも余りなく割り切ることができる最大の整数のことです。ここではユークリッドの互除法を用いてGCDを計算します。この手法では、数値同士の割り算を繰り返し行い、余りが0になった時点で計算を終了します。ユークリッドの互除法の仕組みユークリッドの互除法は、次のような手順で動作します。2つの数 a と b を用意します。a が 0 の場合、b が最