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

C++で2つの数の最大公約数(HCF)を求めるプログラム

このチュートリアルでは、2つの数の最大公約数(HCF:Highest Common Factor、GCDとも呼ばれます)を求めるプログラムについて解説します。

最大公約数とは、2つの整数をどちらも割り切ることができる正の整数の中で、最も大きいものを指します。例えば、98と56の場合、両方を割り切れる最大の数は14となるため、最大公約数は14です。

アルゴリズムの考え方

ここでは再帰的な手法を用いて最大公約数を求めます。基本的な流れは以下のとおりです。

  • どちらかの数が0の場合は、0を返します
  • 2つの数が等しい場合は、その値が最大公約数となります
  • aがbより大きい場合は、aからbを引いた値とbで再帰的に計算します
  • それ以外の場合は、aとbからaを引いた値で再帰的に計算します

サンプルコード

#include <stdio.h>
// 再帰呼び出しでHCFを求める
int gcd(int a, int b){
    if (a == 0 || b == 0)
        return 0;
    if (a == b)
        return a;
    if (a > b)
        return gcd(a-b, b);
    return gcd(a, b-a);
}
int main(){
    int a = 98, b = 56;
    printf("GCD of %d and %d is %d ", a, b, gcd(a, b));
    return 0;
}

実行結果

GCD of 98 and 56 is 14

補足:ユークリッドの互除法との関係

上記のコードは「減算による再帰」を使ったシンプルな実装ですが、数値が大きい場合には処理に時間がかかることがあります。より効率的に求めたい場合は、剰余演算(%)を用いたユークリッドの互除法を採用するのが一般的です。gcd(a, b) を gcd(b, a % b) に置き換えることで、再帰回数を大幅に減らすことができます。

  1. 3つの数字の中から最大値を見つけるC++プログラム

    3つの数値の中から最大のものを求めるには、if文を組み合わせて条件分岐を行うのが基本的な方法です。ここでは、if文を入れ子構造にして最大値を判定するC++プログラムを紹介します。 サンプルコード #include <iostream> using namespace std; int main() {    int a = 5 ,b = 1 ,c = 9;    if(a>b) {       if(a>c)       cout<<a<<&quo

  2. Pythonでリスト内の全要素の最大公約数(GCD)を求める方法

    Pythonでは、mathモジュールのgcd()関数を活用することで、リスト内のすべての整数に共通する最大公約数(GCD:Greatest Common Divisor)を簡単に求めることができます。例えば、リスト nums = [15, 81, 78] が与えられた場合、15・81・78 のすべてを割り切れる最大の正の整数は 3 であるため、出力結果は 3 になります。解法のアプローチこの問題は、以下の手順で解決できます。リストの要素数が1つだけの場合は、その要素をそのまま返します。まず、最初の2つの要素 nums[0] と nums[1] の最大公約数を計算し、変数 div に格納します。