最大公約数と最小公倍数

中級

カテゴリ: dynamic-programming

概要

最大公約数(GCD)と最小公倍数(LCM)は、整数論の基本的な概念であり、多くのアルゴリズム問題で重要な役割を果たします。GCDは2つ以上の整数の共通する約数のうち最大のもの、LCMは2つ以上の整数の共通する倍数のうち最小のものです。これらは、分数の約分、周期性の検出、暗号理論など、様々な応用があります。ユークリッドのアルゴリズムを使用することで、GCDを効率的に計算でき、GCDとLCMの関係式(a * b = GCD(a, b) * LCM(a, b))を利用してLCMも計算できます。これらの概念は、競技プログラミングや実際のソフトウェア開発で頻繁に使用されます。

コードテンプレート

Java
Python
// Java code not available
Java

ひらめきのサポート

問題文に以下のようなキーワードや特徴がある場合、このパターンの適用を検討してみましょう。

最大公約数最小公倍数GCDLCMユークリッドのアルゴリズム拡張ユークリッド互いに素約分オイラーのトーシェント関数

チャート式ひらめきポイント

問題を読んだときに、「ソート済み配列で何かを見つける」「二つの要素の関係を調べる」「効率的に配列を操作する」などの特徴があれば、 双指針パターンが適用できる可能性が高いです。特に、O(n²)の計算量を避けたい場合に有効です。

このパターンを使用する問題例

  • 1

    分数の約分: 分子と分母のGCDで割ることで分数を最も簡単な形に約分

  • 2

    複数のタスクのスケジューリング: 異なる周期で実行されるタスクの同期ポイントを計算

  • 3

    暗号理論: RSA暗号などの公開鍵暗号方式でGCDを使用

  • 4

    循環小数の周期計算: 分数を小数に変換した際の循環部分の長さを求める

  • 5

    時計の問題: 異なる周期で動く針が重なる時間を計算

関連するパターン

modular-arithmeticbinary-exponentiationdynamic-programming