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

C++で3つ以上の数値(または配列)の最大公約数(GCD)を求める方法

本記事では、3つ以上の数値の最大公約数(GCD)をC++で求める方法を解説します。

2つの数値のGCDを求めるのは簡単ですが、3つ以上の数値を扱う場合はGCDの結合法則を利用します。例えば、{w, x, y, z} のGCDを求めたい場合、以下のように段階的に計算します。

  • まず {gcd(w, x), y, z} を計算
  • 次に {gcd(gcd(w, x), y), z) を計算
  • 最後に {gcd(gcd(gcd(w, x), y), z)} を計算

この手法を配列に適用すれば、任意の個数の数値に対してGCDを簡単に求めることができます。

アルゴリズム

gcd(a, b)

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

getArrayGcd(arr, n)

begin
   res := arr[0]
   for i in range 1 to n-1, do
      res := gcd(arr[i], res)
   done
   return res;
end

配列の先頭要素を初期値とし、残りの要素を順番に前の結果とGCD計算していくことで、全体のGCDが得られます。

C++コード例

#include<iostream>
using namespace std;
int gcd(int a, int b) {
   if (a == 0)
      return b;
   return gcd(b%a, a);
}
int getArrayGcd(int arr[], int n) {
   int res = arr[0];
   for(int i = 1; i < n; i++) {
      res = gcd(arr[i], res);
   }
   return res;
}
main() {
   int arr[] = {4, 8, 16, 24};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout << "GCD of array elements: " << getArrayGcd(arr, n);
}

実行結果

GCD of array elements: 4

このプログラムでは、ユークリッドの互除法を用いた再帰関数 gcd() により2つの数値のGCDを求め、getArrayGcd() 関数でそれを配列全体へ拡張しています。配列 {4, 8, 16, 24} の各要素を順に処理した結果、最大公約数である「4」が出力されます。

  1. Pythonで配列内の複数の数値の最大公約数(GCD)を求める方法

    はじめに本記事では、Pythonを使って配列(リスト)内の2つ以上の数値から最大公約数(GCD:Greatest Common Divisor)を求める方法を解説します。問題の概要数値の配列が与えられ、そのすべての要素に共通する最大公約数を求めることが目的です。3つ以上の数値のGCDは、「引数として渡されたすべての数値に共通する素因数の積」として定義できます。また、隣り合う2つの数値のGCDを繰り返し計算していくことでも求められます。ここでは、後者のアプローチである「ペアごとのGCDを順番に計算する」方法を実装します。アルゴリズムの流れまず、リストの最初の2つの要素のGCDを計算します。次に、

  2. Pythonで複数の数値や配列の最大公約数(GCD)を求める方法

    本記事では、以下の問題に対する解決策について詳しく解説します。問題の概要与えられた数値の配列から、それらすべての最大公約数(GCD)を求める必要があります。アプローチ2つより多い数値の最大公約数を求める場合、GCDは引数として渡されたすべての数値に共通する素因数の積と等しくなります。これは数学的な定義に基づく方法ですが、実装がやや複雑になります。もう一つの方法として、2つの数値ずつペアでGCDを繰り返し計算するという手法があります。具体的には、最初の2つの数値のGCDを求め、その結果と次の数値のGCDを計算し、これを配列の最後まで繰り返します。本記事では、後者のアプローチを実装していきます。実