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

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 に格納します。
  • 要素数が2つだけであれば、この時点で div を返して終了します。
  • 3つ目以降の要素については、ループ処理で順番に div と各要素の最大公約数を計算していきます。
  • 計算途中で div が 1 になった場合は、それ以上大きくなることはないため、即座に 1 を返して処理を打ち切ると効率的です。
  • 最後に残った div の値が、リスト全体の最大公約数となります。

実装コード

以下に、実際のPythonコードの実装例を示します。

from math import gcd

def solve(nums):
    if len(nums) == 1:
        return nums[0]

    div = gcd(nums[0], nums[1])

    if len(nums) == 2:
        return div

    for i in range(1, len(nums) - 1):
        div = gcd(div, nums[i + 1])
        if div == 1:
            return div

    return div

nums = [15, 81, 78]
print(solve(nums))

入力

[15, 81, 78]

出力

3

補足:より簡潔な書き方

Python 3.9以降では、math.gcd() が複数の引数を受け取れるようになったため、以下のようにfunctools.reduceやアンパックを使ってより簡潔に記述することも可能です。

from math import gcd

nums = [15, 81, 78]
print(gcd(*nums))  # 出力: 3

このように、最大公約数の性質「gcd(a, b, c) = gcd(gcd(a, b), c)」を利用すれば、任意の個数の整数に対して柔軟に対応できます。

  1. リスト内の要素の合計を求めるPythonプログラム

    この記事では、Pythonを使ってリスト内のすべての要素の合計を求める方法について、具体的なコード例とともに解説します。問題の定義リストが入力として与えられたとき、そのリストに含まれるすべての要素の合計値を計算する必要があります。例えば、[1, 2, 3, 4, 5]というリストが与えられた場合、出力は 15(1+2+3+4+5)となります。この問題を解くためのアプローチは主に2つあります。1つは組み込み関数を使用する方法、もう1つはブルートフォース(総当たり)方式でループ処理を行う方法です。方法1:組み込み関数 sum() を使うPythonには標準で用意されている組み込み関数 sum()

  2. 3つのソート済み配列から共通要素を見つけるPythonプログラムの書き方

    この記事では、Pythonを使って3つのソート済み配列(リスト)に共通して含まれる要素を効率的に見つける方法を解説します。 基本的な流れは以下のとおりです。まず、ユーザーが入力した3つの未ソートのリストを用意し、それぞれをsorted()関数で昇順に並べ替えます。その後、各リストの先頭から同時に走査を行い、3つのリストの現在位置にある要素がすべて一致するかどうかを確認します。一致していればその要素を出力し、一致していなければ最も小さい値を持つインデックスを進めて次の要素へ移動します。 処理の概要 配列のサイズをそれぞれ n1、n2、n3 とし、各配列の走査位置を示すインデックスを i = 0、