暗号理論入門 2.9〜2.10
- 作者: 林芳樹
- 出版社/メーカー: 丸善出版
- 発売日: 2012/04/20
- メディア: 単行本
- この商品を含むブログを見る
2.9 拡張されたユークリッドのアルゴリズム
ユークリッドのアルゴリズムを拡張して、 が成立するような整数 を計算する。
ユークリッドのアルゴリズムを に適用したときの剰余数列を で、商の数列を で表す。
と が上記の等式を満たすように二つの数列 を構成する。
初期値は とし、
、 、
とおく。
に対して、 が成立する。
かつ の場合は以下のようになる。
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
100 | 35 | 30 | 5 | 0 | |
2 | 1 | 6 | |||
1 | 0 | 1 | 1 | 7 | |
0 | 1 | 2 | 3 | 20 |
かつ である。
拡張ユークリッドアルゴリズムにより、 以外にも係数
、
が計算された。
pythonで書いてみた。
def xeuclid(a, b): x = [1, 0] y = [0, 1] sign = 1 while b: q, r = divmod(a, b) a, b = b, r x[1], x[0] = q*x[1] + x[0], x[1] y[1], y[0] = q*y[1] + y[0], y[1] sign = -sign x = sign * x[0] y = -sign * y[0] return a, x, y
2.10 拡張ユークリッドアルゴリズムの分析
と が整数であるとき、 と の拡張ユークリッドアルゴリズムを使って計算すれば、実行時間 が必要である。
( と の積と同じオーダーで計算できる)