計算ツール
数学整数論アルゴリズム暗号

最大公約数 最小公倍数 計算|複数値のGCD・LCM・素因数分解を一括算出

複数の整数から最大公約数(GCD)と最小公倍数(LCM)を瞬時に計算します。ユークリッドの互除法、素因数分解、約数列挙、互いに素の判定まで完全対応。小学校の分数通分・約分、中学受験の整数問題、高校の整数論、大学のアルゴリズム論、そしてRSA暗号など現代暗号への応用まで、日本数学会・文部科学省の資料に沿って徹底解説する完全無料ツールです。

最終更新:2026-07-26/監修:計算ツールズ編集部

GCD・LCM 計算ツール

最大20個まで、各値は10桁まで対応。

計算式と基本定義

ユークリッドの互除法:GCD(a, b) = GCD(b, a mod b)、b=0でGCD=a
LCM(a, b) = a × b ÷ GCD(a, b)
複数値:GCD(a, b, c) = GCD(GCD(a, b), c)
LCM(a, b, c) = LCM(LCM(a, b), c)
GCD(a, b) × LCM(a, b) = a × b(2数のみ)

最大公約数 (Greatest Common Divisor, GCD) は、2つ以上の整数を共通で割り切る最大の正整数です。最小公倍数 (Least Common Multiple, LCM) はそれらすべての倍数となる最小の正整数。GCDは分数の約分・等間隔配置に、LCMは分数の通分・周期問題に使われます。

例:12, 18, 30 の場合。GCD = 6(すべてを6で割り切れる最大値)、LCM = 180(3数すべての倍数となる最小値)。12 = 2²×3、18 = 2×3²、30 = 2×3×5 と素因数分解して、共通素因数の最低次数がGCD、全素因数の最高次数がLCMになります。

ユークリッドの互除法

ユークリッドの互除法は、紀元前300年頃のギリシャの数学者ユークリッド(エウクレイデス)が『原論』第7巻に記した、2数のGCDを高速に求めるアルゴリズムです。2300年経った現代でも整数論・暗号理論の基礎として現役で使われています。

手順

GCD(1071, 462) を求める例:

1071 = 462 × 2 + 147
462 = 147 × 3 + 21
147 = 21 × 7 + 0 ← 余り0でGCD = 21

「大きい数を小さい数で割り、余りで割り直す」を繰り返し、余りが0になった時の除数がGCD。試し割りに比べ計算回数が対数的(O(log n))で、100桁の整数でも数百回で終了します。

拡張ユークリッド互除法

拡張ユークリッド互除法は、GCD(a, b) = ax + by となる整数 x, y を同時に求めるアルゴリズム。この (x, y) はベズーの等式の解と呼ばれ、RSA暗号の秘密鍵計算(モジュラ逆元)の中核です。競技プログラミング・暗号ライブラリの必須実装。

素因数分解と算術の基本定理

算術の基本定理(素因数分解の一意性):1より大きいすべての整数は、素数の積として一意に表せます。例:60 = 2² × 3 × 5、100 = 2² × 5²、720 = 2⁴ × 3² × 5。

試し割り法

2, 3, 5, 7... と小さい素数から順に割り、割り切れるだけ割る古典的手法。√n までの素数を試せば十分(それより大きい素数の因子は最大1つ)。n = 10⁹ でも約3万回の試し割りで完了し、実用的です。

大きな数の素因数分解の困難性

100桁以上の数の素因数分解は、宇宙年齢(138億年)以上かかるとされる計算量的難問。この困難性が、RSA暗号の安全性の根拠になっています。効率的な古典アルゴリズムとして楕円曲線法・二次篩法・数体篩法が知られ、量子コンピュータのショアのアルゴリズムは理論上多項式時間で解けます。

素因数分解でGCD・LCMを求める

GCD = 各素因数の指数の最小値を取る
LCM = 各素因数の指数の最大値を取る

例:a = 60 = 2²×3×5、b = 84 = 2²×3×7 → GCD = 2²×3 = 12、LCM = 2²×3×5×7 = 420。

約数と約数の個数

約数とは、ある整数を割り切る整数のこと。約数の個数と総和は、素因数分解から公式で求まります。

n = p₁^a₁ × p₂^a₂ × ... × pₖ^aₖ のとき
約数の個数 τ(n) = (a₁+1)(a₂+1)...(aₖ+1)
約数の総和 σ(n) = Π (p^(aᵢ+1) − 1)/(p − 1)

例:60 = 2²×3×5 → 約数の個数 = 3×2×2 = 12個、約数総和 = (2³−1)(3²−1)/(2)(5²−1)/(4)... = 168。

約数の総和が自分自身と等しい数を完全数と呼び、6・28・496・8128... と続きます。ユークリッドが「メルセンヌ素数から完全数を作る公式」を『原論』で示し、オイラーが「偶数完全数はこの形しかない」ことを証明しました。奇数完全数の存在は現在も未解決問題です。

分数の通分・約分への応用

分数計算はGCD・LCMの最重要応用分野です。小学5〜6年の算数の中核内容として文部科学省学習指導要領に位置付けられています。

約分(GCD使用)

分子と分母のGCDで割り、既約分数にする操作。
18/24 → GCD(18, 24) = 6 → 3/4
84/126 → GCD(84, 126) = 42 → 2/3

通分(LCM使用)

異分母の分数を、分母のLCMに合わせて統一する操作。
1/4 + 1/6 → LCM(4, 6) = 12 → 3/12 + 2/12 = 5/12
1/6 + 1/8 + 1/12 → LCM(6, 8, 12) = 24 → 4/24 + 3/24 + 2/24 = 9/24 = 3/8

よくある問題例

状況使う指標計算例
分数の通分LCM1/4 + 1/6 → 分母LCM=12
分数の約分GCD18/24 → GCD=6で3/4
歯車の噛み合い周期LCM14歯と21歯が同位置に戻る回転=LCM/歯数
等間隔配置GCD120cmと180cmの板を等間隔に切る最大長=60cm
タイル敷き詰めGCD270×180cmの床に最大正方形タイル=90cm角
暗号(RSA)GCD互いに素の判定でオイラーのトーシェント関数計算
周期問題LCM3日ごと・4日ごと・6日ごとに来る客が全員会うのは12日ごと
音楽のリズムLCM3拍子と4拍子の頭が揃うのは12拍ごと

歯車・周期・等間隔配置

歯車の噛み合い

歯数14の歯車Aと歯数21の歯車Bが噛み合う場合。全ての歯が一度ずつ噛み合って初期位置に戻る歯数はLCM(14, 21) = 42。つまり歯車Aは3回転、歯車Bは2回転で初期状態に戻ります。この計算は自動車のギア設計、時計のムーブメント、機械式カウンタ設計で必須です。

惑星の会合周期

公転周期の異なる2惑星が同じ相対位置に来るまでの周期(会合周期)。地球(1年)と火星(1.88年)が会合するのは、シノディック周期の計算により約2.14年ごと。厳密には有理数近似でLCM的な計算をします。

等間隔配置

長さ120cm・180cm・240cmの3種類の板を、余りなく同じ長さに切る最大長 = GCD(120, 180, 240) = 60cm。工作、建築、フローリング施工でよく使う考え方です。

RSA暗号と整数論の応用

1977年に発表されたRSA暗号(Rivest-Shamir-Adleman)は、現代のインターネット通信(HTTPS/TLS)の基盤となる公開鍵暗号方式で、GCD・素因数分解の困難性を安全性の根拠にしています。

RSA鍵生成の概略

1. 大きな素数 p, q(各1024ビット以上)を選ぶ
2. n = p × q(法)、φ(n) = (p−1)(q−1)(オイラーのトーシェント)を計算
3. e を「GCD(e, φ(n)) = 1」となる整数から選ぶ(公開鍵)
4. 拡張ユークリッド互除法で d ≡ e⁻¹ (mod φ(n)) を計算(秘密鍵)

ここで互いに素の判定(GCD=1)拡張ユークリッド互除法が本質的に使われます。素因数分解の困難性から、公開鍵 (n, e) を知っていても p, q を復元できず、秘密鍵 d は攻撃者にはわからない、という構造。

Diffie-Hellman鍵交換・楕円曲線暗号

その他、Diffie-Hellman鍵交換、楕円曲線暗号(ECC)、ゼロ知識証明などの現代暗号技術も整数論を土台にしています。IPA(情報処理推進機構)の暗号技術ガイドラインでこれらの技術仕様が公表されています。

計算量と実装(Python・JavaScript)

ユークリッド互除法はO(log min(a, b))の高速アルゴリズムで、100桁の数でも数百回で終了します。試し割りのO(min(a, b))とは比較にならない効率です。

Python実装

from math import gcd, lcm
gcd(12, 18) # 6
lcm(4, 6) # 12(Python 3.9+)
# 拡張版
def extgcd(a, b):
  if b == 0: return a, 1, 0
  g, x, y = extgcd(b, a % b)
  return g, y, x - (a // b) * y

JavaScript実装

const gcd = (a, b) => b === 0 ? Math.abs(a) : gcd(b, a % b);
const lcm = (a, b) => Math.abs(a * b) / gcd(a, b);

教育・実務での応用

小学校算数(分数)

小学5年で「約分・通分」、6年で「分数の四則演算」を学びます。GCDで約分、LCMで通分。文部科学省学習指導要領の中心単元で、中学受験でも整数問題として頻出です。

中学・高校数学(整数論)

中学3年で「素因数分解」、高校数学Aで「約数と倍数」「ユークリッド互除法」「合同式」を学習。大学入試の整数問題では、GCD・LCM・素因数分解が中心テーマ。

プログラミング・競技プログラミング

AtCoder・ICPC等の競技プログラミング必須アルゴリズム。GCD、拡張ユークリッド、中国剰余定理、フェルマー小定理、ミラー・ラビン素数判定など。

暗号技術・情報セキュリティ

RSA、Diffie-Hellman、楕円曲線暗号(ECC)、ゼロ知識証明の基礎。IPA情報処理技術者試験でも整数論の知識が問われます。

機械設計・時計

歯車の歯数比、ムーブメントの周期設計、機械式カウンタの繰上り設計にLCM・GCDを使用。JIS B 1701(歯車用語)に基準化。

音楽理論・リズム

ポリリズム(3拍子と4拍子の重ね合わせ)の周期はLCM(3,4)=12拍。現代音楽・アフリカ音楽・プログレッシブロックで整数論的リズムが使用されます。

整数論の歴史と数学者たち

GCD・LCMを含む整数論は、数学の中でもっとも古く、かつ現代最先端の分野の一つです。

時代数学者業績
紀元前300年ユークリッド(古代ギリシャ)『原論』でユークリッド互除法・素数の無限性を証明
3世紀ディオファントス『算術』で整数解方程式(ディオファントス方程式)を研究
17世紀フェルマー(フランス)フェルマーの小定理、フェルマーの最終定理(〜1994年ワイルズが証明)
18世紀オイラー(スイス)オイラーのトーシェント関数φ(n)、平方剰余の相互法則の準備
19世紀ガウス(ドイツ)『整数論研究』(Disquisitiones Arithmeticae)で近代整数論を確立
1977年Rivest, Shamir, AdlemanRSA暗号を発表、整数論が暗号技術の中心に
1994年ワイルズ(英)フェルマーの最終定理を証明、モジュラー形式と楕円曲線を結合
1994年ショア(米)量子コンピュータによる素因数分解アルゴリズムを発表

ガウスは「数学は科学の女王、整数論は数学の女王」と述べ、整数論の中心性を強調しました。現代でも、ラングランズ・プログラム、abc予想(望月新一)、リーマン予想(未解決)など、最先端の研究テーマが数多く残されています。

よくある間違い・注意点

  • 「GCD × LCM = 積」は2数のみ成立 — 2数の場合は必ず GCD(a,b)×LCM(a,b) = a×b が成立するが、3数以上では成立しない。例:GCD(4,6,8) = 2、LCM(4,6,8) = 24、2×24 = 48 ≠ 192。
  • 試し割りで素因数分解を全数チェック — √n までの素数だけ試せば十分。n以下すべてを試すのは無駄。10⁹ でも約3万個の素数で完了。
  • 「素数」と「互いに素」を混同 — 素数は1と自分自身以外に約数を持たない数。互いに素は「GCDが1」であること。9と16は互いに素だが、どちらも素数ではない。
  • 1を素数と勘違い — 1は素数ではない(現代数学の定義)。素因数分解の一意性を保つため、素数は「1より大きい」と定義。歴史的には1を素数に含めた時代もあった。
  • 0のGCD — GCD(a, 0) = |a|(数学的定義)。0はすべての整数の倍数と見なすため。負の数は絶対値で計算するのが慣例(GCD(−12, 18) = 6)。
  • LCMがオーバーフロー — LCM = a×b÷GCD で先に掛け算するとオーバーフローの危険。a÷GCD×bの順に計算するのが定石。プログラミングでは特に重要。
  • ユークリッド互除法の計算方向 — 「大きい数÷小さい数」の順で余りを求めて再帰。順序を逆にすると1ステップ増えるだけで結果は同じだが、教科書手順に従うのが無難。

参考文献・公的資料

整数論・GCD・LCM・素因数分解の学習内容および学術的基礎については、以下の公的機関・学術団体の資料を参照してください。

※本ツールは10桁までの整数を対象とした概算計算です。RSA暗号など安全性要件のある用途では、GMP・PARI/GP等の多倍長整数ライブラリと専門ソフトウェアの使用を推奨します。情報セキュリティ設計はIPA・CRYPTREC等の公的ガイドラインを一次資料としてください。

よくある質問(FAQ)

GCDとLCMの関係は?

2数の場合:GCD(a, b) × LCM(a, b) = a × bが必ず成立します。例:6×8=48、GCD=2・LCM=24、2×24=48 ✓。ただし3つ以上の整数では成立しません(例:GCD(4,6,8)×LCM(4,6,8) = 2×24 = 48 ≠ 192)。

互いに素(coprime)とは?

GCD = 1の状態、つまり2数に共通の素因数がない状態です。RSA暗号の鍵生成、フェルマーの小定理、エラトステネスの篩の理論的基盤。連続する2整数は必ず互いに素(例:14と15、100と101)。1はすべての整数と互いに素です。

素因数分解の効率は?

√n までの素数を試し割り:n = 10⁹ なら約3万個の素数で十分。100桁以上の素因数分解は宇宙年齢以上かかるとされ、この困難性がRSA暗号の安全性の根拠です。効率的な古典アルゴリズムに楕円曲線法・数体篩法、量子アルゴリズムにショアのアルゴリズムがあります。

ユークリッドの互除法の高速性は?

2数のGCDをO(log n)(対数時間)で計算できます。100桁の数でも数百回以内に終了、試し割り(線形時間、10⁵⁰回必要)とは比較にならない効率。紀元前300年頃にユークリッド『原論』第7巻に記されたアルゴリズムが、2300年経った今でも整数論・暗号理論の中核として使われている稀有な事例です。

0や負の数のGCDは?

GCD(a, 0) = |a|(数学的定義)。0はすべての整数の倍数とみなすためです。負の数は絶対値で計算するのが慣例で、GCD(−12, 18) = GCD(12, 18) = 6。本ツールも絶対値で処理しています。

拡張ユークリッド互除法とは?

GCD(a, b) = ax + by となる整数 x, y を求めるアルゴリズム。この解 (x, y) はベズーの等式と呼ばれ、モジュラ逆元(RSA秘密鍵計算)、中国剰余定理、線形合同式の解法に不可欠。競技プログラミング・暗号ライブラリの必須実装です。

1は素数?

1は素数ではありません(現代数学の定義)。素数の定義は「1より大きく、1と自分自身以外に約数を持たない」で、1を含めると「算術の基本定理(素因数分解の一意性)」が崩れるため除外されます。歴史的には1を素数に含めた時代もありました。最小の素数は2です。

完全数・友愛数とは?

完全数は約数の総和が自分自身と等しい数(6・28・496・8128...)。友愛数は2数がお互いの約数総和になる数(220と284)。古代ギリシャから研究され、ユークリッド・オイラー・フェルマーが業績を残しました。奇数完全数の存在は現在も未解決問題です。

RSA暗号の安全性の根拠は?

大きな数(1024〜4096ビット)の素因数分解の困難性。公開鍵 n = p×q から素数 p, q を復元できれば暗号は解けますが、古典計算機では非現実的な時間がかかります。量子コンピュータのショアのアルゴリズムで理論上多項式時間で解けるため、耐量子暗号(格子暗号等)への移行が進められています。

歯車の周期計算にLCMを使うのは?

歯数14の歯車Aと歯数21の歯車Bが噛み合う場合、全ての歯が一度ずつ噛み合って初期位置に戻る歯数はLCM(14, 21) = 42。つまりAは3回転、Bは2回転で初期状態に戻ります。時計のムーブメント、自動車ギア、機械式カウンタの周期設計で必須です。

Excelで最大公約数を計算するには?

GCD関数LCM関数が組み込まれています。=GCD(12, 18) → 6、=LCM(4, 6) → 12。複数値も=GCD(12, 18, 30)のように直接指定可能。Google Sheetsも同じ関数名です。

プログラミングでGCDを実装するには?

Pythonはmath.gcd(a, b)math.lcm(a, b)が標準(3.9以降)。JavaScriptは自力実装:const gcd = (a,b) => b===0 ? Math.abs(a) : gcd(b, a%b)。C++はstd::gcdstd::lcm(C++17以降)。競技プログラミングでは拡張版も頻出。