高速指数関数的アルゴリズム

問題の概要

RSAは、暗号化および復号化プロセスは、整数モジュロの特定の整数累乗後に必要とされます。時間のほとんどは、これら二つの整数が比較的大きい、中間結果は、コンピュータが許容範囲の整数(例えば、コンピューティング超える今回算出される直接的な意味によって得られる(66 ^ {77} \ \)はかなりあり、小)が、一方で、我々のような、コンピューティングの効率を考慮しなければならない(66 ^ {77} \)\直接76回の乗算を行うための単語の定義に従って計算され、オーバーヘッドがかなりあります。この2つの問題のために、我々は、効率的かつ正確に、大きな整数演算の計算力に優れたアルゴリズムを持っている必要があります。

予備的なアイデア

値が大きすぎる問題であることを最初に問題のために、剰余演算の特性を使用することを検討して:
\ [(A * B)(N-MOD)= [(A(N-MOD))*(B(N-MOD))]( MOD N)\]
有効中間値を低減することができます。
第二の問題のために、インデックスのプロパティを使用して、繰り返し二乗の各部分についての結果は、オペレーションの最小数は、保存のようであってもよい(\ log_2n)\計算、(X ^ {16} \ \ ) 、それが可能です行わ以下:
\ [^ X 2、X 4 ^、X ^ 8、X 16 ^ {} \]
必要のみ定義に従って計算される3/4の比率を減少させる、4回を数えます。

高速指数関数的アルゴリズム

高速指数関数アルゴリズムは、以下のようなアルゴリズムが記述されている、上記の二つのアイデアが組み込まれています。

一般的に、我々は、計算\(^ mmodn \) mが最初バイナリ形式を表す場合\(b_k、B_。1-K {}、...、B_0 \) すなわち
\ [M = \和\ limits_を { b_i = 1} 2 ^ I \
] したがって、
\ [A ^ M = A ^ {\ SUM \ limits_ {B_i = 1} 2 ^ I} = \のProd \ limits_ {B_i = 1} A ^ {2 ^ I} \]
\ [^ mmodn = A [\のProd \ limits_ B_i = {}。1 A ^ I ^ {2}] MODN = \のProd \ limits_ B_i = {}。1 [I ^ A ^ {2} MODN] \]

コード簡単に実現:

d = 1
for i in range(k+1):
    d = d*d%n
    if b[i] == '1':
        d = d*a%n

突然それを考えると、彼は私たちは本当に多くのミスを林を配布資料が、私はあなたの能力を修正することができると信じ、OOOレッスンは、OOO、私はこれらの言葉を覚えて、午後のホット泣いたことを発表しました

おすすめ

転載: www.cnblogs.com/chuaner/p/12019791.html