数学において、2 つ以上の整数(すべてがゼロではない)の最大公約数( GCD ) は、最大公約数 (GCF)とも呼ばれ、それぞれの整数を割り切る最大の正の整数です。2 つの整数x、yの場合、 xとyの最大公約数は次のように表されます。例えば、8と12の最大公約数は4、つまりgcd(8, 12) = 4です。[ 1 ] [ 2 ]
「最大公約数」という名称では、形容詞「最大」を「最高」に、「約数」を「因数」に置き換えることができ、他の名称には最大公約数 (HCF)などがある。[ 3 ] [ 4 ] [ 5 ] [ 6 ]歴史的には、同じ概念を表す他の名称として最大公約数があった。[ 7 ]
この概念は多項式(多項式の最大公約数を参照)やその他の可換環(下記の§ 可換環を参照)にも拡張できる。
少なくとも一方がゼロでない整数aとbの最大公約数(GCD) は、 aとbの両方の約数となる最大の正の整数dです。つまり、a = deかつb = dfとなる整数eとfが存在し、d はそのような最大の整数です。aとbの最大公約数は一般にgcd( a , b )と表記されます。[ 8 ]
aとbのどちらかがゼロの場合、最大公約数はゼロでない整数の絶対値になります。gcd ( a , 0) = gcd(0, a ) = | a | 。このケースは、ユークリッドの互除法の終了ステップとして重要です。
上記の定義は、 0 × n = 0となる最大の整数n が存在しないため、gcd(0, 0) を定義するのには不適切です。しかし、最大が割り切れる関係の文脈で理解される場合、ゼロはそれ自身の最大の約数であるため、 gcd(0, 0)は一般的に0と定義されます。これにより、GCD の通常の恒等式、特にベズーの恒等式、すなわちgcd( a , b )が{ a , b }と同じイデアルを生成するという恒等式が維持されます。[ 9 ] [ 10 ] [ 11 ]この慣例は、多くのコンピュータ代数システムで採用されています。[ 12 ]それにもかかわらず、一部の著者はgcd(0, 0)を未定義のままにしています。[ 13 ]
aとbの最大公約数は、整除関係におけるaとbの最大の正の公約数です。つまり、aとbの公約数は、aとbの最大公約数と完全に一致します。これは一般的に、ユークリッドの補題、算術の基本定理、またはユークリッドの互除法を用いて証明されます。これが、最大公約数の概念を一般化する際に用いられる「最大」の意味です。
数54は、2つの整数の積として、いくつかの異なる方法で表すことができます。
したがって、54 の約数の完全なリストは 1、2、3、6、9、18、27、54 です。同様に、24 の約数は 1、2、3、4、6、8、12、24 です。これら 2 つのリストに共通する数は、54と24 の共通の約数、つまり、
これらのうち、最大は6なので、6が最大公約数です。
このように2つの数のすべての約数を計算する方法は、特に約数が多い大きな数の場合、通常は効率的ではありません。より効率的な方法は、§ 計算で説明されています。
2 つの数は、それらの最大公約数が1に等しい場合、互いに素である、または互いに素であると呼ばれます。[ 14 ]例えば、9 と 28 は互いに素です。

例えば、24×60の長方形の領域は、1×1の正方形、2×2の正方形、3×3の正方形、4×4の正方形、6×6の正方形、または12×12の正方形のグリッドに分割できます。したがって、12は24と60の最大公約数です。このように、24×60の長方形の領域は、1辺に2つの正方形(24/12 = 2)、もう一方の辺に5つの正方形(60/12 = 5)がある12×12の正方形のグリッドに分割できます。
最大公約数は、分数を既約分数にするために役立ちます。[ 15 ]例えば、gcd(42, 56) = 14なので、
両方ともゼロではない2つの整数の最小公倍数は、次の関係式を用いて、それらの最大公約数から計算できます。
最大公約数は、 2 つの数の素因数分解を決定し、因数を比較することによって計算できます。たとえば、gcd(48, 180)を計算するには、素因数分解 48 = 2 4 · 3 1と 180 = 2 2 · 3 2 · 5 1を見つけます。すると、最大公約数は 2 min(4,2) · 3 min(1,2) · 5 min(0,1) = 2 2 · 3 1 · 5 0 = 12 となります。対応する最小公倍数は、2 max(4,2) · 3 max(1,2) · 5 max(0,1) = 2 4 · 3 2 · 5 1 = 720 となります。
実際には、この方法は小さな数にしか適用できない。なぜなら、素因数分解の計算には時間がかかりすぎるからである。
ユークリッドが導入した最大公約数を計算する方法は、 a > bであるような2 つの正の整数aとbが与えられたとき、aとbの公約数はa – bとbの公約数と同じであるという事実に基づいています。
つまり、ユークリッドが2つの正の整数の最大公約数を計算する方法は、大きい方の数を2つの数の差に置き換え、2つの数が等しくなるまでこれを繰り返すというものです。つまり、その2つの数が最大公約数となります。
例えば、gcd(48,18)を計算するには、次のようにします。
したがって、gcd(48, 18) = 6 です。
この方法は、一方の数値が他方の数値よりはるかに大きい場合、非常に時間がかかる可能性があります。そのため、一般的には後述の方法が推奨されます。
より効率的な方法はユークリッドの互除法であり、これは2つの数aとbの差を、aをbで割ったときのユークリッド除算(余り除算とも呼ばれる)の余りに置き換える変種である。
この剰余をa mod bと表記し、アルゴリズムは( a , b )を( b , a mod b )に繰り返し置き換え、ペアが( d , 0)になるまで続けます。ここでdは最大公約数です。
例えば、gcd(48,18)を計算する場合、計算方法は以下のとおりです。
これもまたgcd(48, 18) = 6となります。
二進数最大公約数アルゴリズムは、ユークリッドの互除法の変形であり、ほとんどのコンピュータで使用されている数値の二進数表現に特化して調整されています。
二進数の最大公約数アルゴリズムは、計算中に遭遇する偶数を毎回2で割るという点で、ユークリッドの互除法と本質的に異なります。その効率性は、二進数表現では偶奇性の判定が最右端の桁の判定に相当し、2で割る操作が最右端の桁の除去に相当するという事実に基づいています。
その方法は以下のとおりで、 まず最大公約数を求める2つの正の整数aとbから始めます。
ステップ1では、 aとbを割り切る2のべき乗の最大値、つまり最大公約数としてdを決定します。どのステップでも、 aとbの奇数公約数の集合は変わりません。これは、アルゴリズムが停止したときに結果が正しいことを示しています。各ステップで少なくとも1つのオペランドが2で割られるため、アルゴリズムは最終的に停止します。さらに、 2による除算の回数、つまり減算の回数は、桁の総数以下です。
例: ( a , b , d ) = (48, 18, 0) → (24, 9, 1) → (12, 9, 1) → (6, 9, 1) → (3, 9, 1) → (3, 3, 1) ; 元の最大公約数は、6 と2 d = 2 1およびa = b = 3 の積です。
バイナリGCDアルゴリズムは、特に実装が容易で、バイナリコンピュータ上で特に効率的です。その計算複雑度は
この複雑さの二乗は、 2による除算と減算にかかる時間が、入力のビット数に比例するという事実から生じている。
計算複雑度は通常、入力の長さnで表されます。ここでは、この長さはn = log a + log bであり、したがって複雑度は次のようになります。
レーマーのアルゴリズムは、ユークリッドの互除法によって生成される初期商は最初の数桁だけで決定できるという観察に基づいています。これは、コンピュータワードよりも大きな数値に有効です。基本的には、通常1つまたは2つのコンピュータワードを形成する初期桁を抽出し、これらのより小さな数値に対してユークリッドの互除法を実行します。ただし、商が元の数値で得られる商と同じであることが保証されている必要があります。商は、元の数値を縮小するために、小さな2×2変換行列(単一ワード整数の行列)に収集されます。このプロセスは、数値が十分に小さくなり、バイナリアルゴリズム(下記参照)の方が効率的になるまで繰り返されます。
このアルゴリズムは、非常に大きな数に対する演算回数を減らし、ほとんどの演算にハードウェア演算を使用できるため、処理速度が向上します。実際、商のほとんどは非常に小さいため、ユークリッドアルゴリズムのかなりの数のステップを、単語1つ分の整数からなる2×2行列にまとめることができます。レーマーのアルゴリズムが大きすぎる商に遭遇した場合、大きな数のユークリッド除算を行うユークリッドアルゴリズムの1回の反復処理にフォールバックする必要があります。

aとbが両方ともゼロでない場合、 aとbの最大公約数は、aとbの最小公倍数(LCM)を使用して計算できます。
しかし、より一般的には、最小公倍数は最大公約数から計算されます。
トーマエの関数fを使用すると、
これは、aとbが有理数または可換な実数である場合に一般化される。
キース・スラビンは、奇数a ≥ 1の場合、次のことを示した。
これは複素数bに対して評価できる関数である。[ 16 ]ヴォルフガング・シュラムは、
最大公約数の計算の計算複雑性は広く研究されてきた。[ 18 ]ユークリッドの互除法と乗算および除算の基本アルゴリズムを使用すると、最大nビットの 2 つの整数の最大公約数の計算はO ( n 2 )となる。これは、最大公約数の計算は定数倍を除いて乗算と同じ複雑性を持つことを意味する。
しかし、高速な乗算アルゴリズムを使用する場合、複雑性を改善するためにユークリッドアルゴリズムを修正することはできますが、最大公約数の計算は乗算よりも遅くなります。より正確には、nビットの 2 つの整数の乗算にT ( n )の時間がかかる場合、最大公約数を求める既知の最速アルゴリズムの複雑性はO ( T ( n ) log n )です。これは、既知の最速アルゴリズムの複雑性がO ( n (log n ) 2 )であることを意味します。
前述の複雑さは、一般的な計算モデル、特にマルチテープチューリングマシンとランダムアクセスマシンに当てはまります。
最大公約数の計算は、準線形時間で解ける問題のクラスに属する。したがって、対応する決定問題は、多項式時間で解ける問題のクラスPに属する。GCD 問題はNCに属することが知られていないため、効率的に並列化する方法は知られていない。また、 P 完全であることも知られていないため、GCD 計算を効率的に並列化することは不可能であると考えられる。Shallcross らは、関連する問題 (EUGCD、ユークリッドアルゴリズム中に発生する剰余列を決定する) が、 2 つの変数を持つ整数線形計画問題と NC 等価であることを示した。どちらかの問題がNCに属するかP 完全であれば、もう一方の問題も同様である。[ 19 ] NCにはNLが含まれているため、非決定性チューリングマシンであっても、GCD を計算するためのスペース効率の良いアルゴリズムが存在するかどうかも不明である。
NCではこの問題は知られていないが、ユークリッドアルゴリズムよりも漸近的に高速な並列アルゴリズムが存在する。既知の最速の決定論的アルゴリズムはChorとGoldreichによるもので、( CRCW-PRAMモデルでは) n 1+ ε 個のプロセッサでO ( n /log n )時間で問題を解決できる。[ 20 ]ランダム化アルゴリズムはO ((log n ) 2 )時間で問題を解決できる。プロセッサ(これは超多項式です)。[ 21 ]
1972年、James E. Nymannは、 {1, ..., n }から独立かつ一様に選ばれたk個の整数が、 nが無限大に近づくにつれて1/ ζ ( k )の確率で互いに素であることを示した。ここでζはリーマンゼータ関数を表す。[ 24 ](導出については「互いに素」を参照)。この結果は1987年に拡張され、 k個のランダムな整数が最大公約数dを持つ確率はd − k /ζ( k )であることが示された。[ 25 ]
この情報を用いると、k = 2の場合、最大公約数関数の期待値は(非公式に)存在しないことがわかる。この場合、最大公約数がdに等しくなる確率はd −2 / ζ (2)なので、次のようになる。
この最後の総和は調和級数であり、発散します。しかし、k ≥ 3の場合、期待値は明確に定義され、上記の議論により、
k = 3の場合、これは約 1.3684 に等しい。k = 4の場合、これは約 1.1106 に等しい。
最大公約数の概念は、任意の可換環の要素に対してより一般的に定義することができるが、一般にすべての要素のペアに対して最大公約数が存在する必要はない。[ 26 ]
この定義によれば、2つの要素aとbは、複数の最大公約数を持つ場合もあれば、全く持たない場合もある。Rが整域である場合、aとbの任意の2つの最大公約数は、定義上、どちらか一方が他方を割り切るため、必ず関連要素となる。実際、最大公約数が存在する場合、その関連要素の1つもまた最大公約数となる。
任意の整数領域では、最大公約数の存在は保証されません。ただし、Rが一意因数分解領域またはその他の最大公約数領域である場合、任意の 2 つの要素は最大公約数を持ちます。R がユークリッド除法がアルゴリズム的に与えられるユークリッド領域である場合(たとえば、 R = F [ X ] ( Fは体)や、Rがガウス整数環の場合)、除法手順に基づくユークリッドアルゴリズムの形式を使用して最大公約数を計算できます。
以下は、最大公約数を持たない2つの要素を持つ整数領域の例です。
元素2とは 2 つの最大公約数です(つまり、2の倍数である公約数は2に関連付けられ、 も同様です)しかし、それらは関連付けられていないため、 aとbの最大公約数は存在しません。
ベズーの性質に対応して、任意の可換環において、環全体にわたるpとqの形の要素の集合pa + qbを考えることができる。これはaとbによって生成されるイデアルであり、単に( a , b )と表記される。すべてのイデアルが主イデアルである環(主イデアル整域、または PID)では、このイデアルはある環の要素dの倍数の集合と同一になる。このとき、このdはaとbの最大公約数である。しかし、 aとbの最大公約数が存在しない場合でも、イデアル( a , b )は有用である。(実際、エルンスト・クンマーはフェルマーの最終定理を扱う際に、このイデアルを最大公約数の代わりとして用いたが、彼はこれをある仮説的、あるいはイデアル的な環の要素dの倍数の集合として想定していたため、環論的な用語となった。)