暗号理論入門 2.7〜2.8
- 作者: 林芳樹
- 出版社/メーカー: 丸善出版
- 発売日: 2012/04/20
- メディア: 単行本
- この商品を含むブログを見る
2.7 最大公約数
少なくとも一方が0でない二つの整数 と のすべての公約数の中には、ただ一つ最大のものが存在し、これを と の最大公約数(greatest common divisor)といい で表す。
0と0の最大公約数は0()。
が実数とし、
と表すものを のすべての整数値線形結合(integer linear combnation)の集合という。
と のすべての整数値の線形結合の集合は のすべての整数の倍数の集合。
よって である。
である整数 と が存在する。
2.8 ユークリッドのアルゴリズム
最古のアルゴリズムと言われる、ユークリッドの互除法。
2つの自然数の最大公約数を効率よく計算できる。
- であれば、 である。
- であれば、
pythonで再帰を使わない実装。
def gcd(a, b): a = abs(a) b = abs(b) while b: r = a%b a = b b = r return a
とおき、 と に対して
とする。
ここで、 はアルゴリズムのwhileループで計算される剰余の数列。
whileループによる 回の計算の後、ユークリッドのアルゴリズムでは
が成立する。
が剰余の数列 の最後の0でない項であるとすると、 はユークリッドのアルゴリズムが を計算するために必要とする反復の総数になる。
とすると、 は の による除法の商であり、
が成立する。
かつ の場合は以下のようになる。
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
100 | 35 | 30 | 5 | 0 | |
2 | 1 | 6 |
この本は非常に解説が丁寧だな。綺麗に論理建てて書かれているし。