𝜌法 7.6 川原未鈴 目次 𝜌法とは 𝜌法の手順 改良版𝜌法の手順 𝜌法の良い点、課題点 5.2.2 𝜌法 非常に大きい奇数が合成数であることがわかっている とする。 ≪素数判定法≫ 試行割算(最も遅い方法)・・・𝑛が合成数+素因子 が判る より高速な素数判定アルゴリズム・・・ 𝑛が合成数 𝑛より小さい素数による試行割算は 𝑛 以上のビット 𝜌 ロー 演算を必要とする。この方法よりも実質的に速く、最 も単純なアルゴリズムは J.M.Pollard 法 が開発した (別名“モンテカルロ法”)である。 𝜌法の手順 Step1 ℤ/𝑛ℤから自分自身への計算が容易でℤ/𝑛ℤ全体に一 様 に分布するであろうと思われている写像、即ち、 𝑓 𝑥 = 𝑥2 + 𝑐 (𝑐 ∈ 1, 𝑛 − 3 )のような 整数係数の非常に単純な多項式を選択する。 Step2 ある特定の値 𝑥 = 𝑥0 (𝑥0 ∈ 0, 𝑛 − 1 )を選択し、 𝑥1 = 𝑓(𝑥0 ),𝑥2 = 𝑓(𝑓(𝑥0 )),𝑥3 = 𝑓(𝑓(𝑓(𝑥0 ))),⋯ と次々に繰り返し写像の値を計算する。即ち、 𝑥𝑗+1 = 𝑓(𝑥𝑗 ), j=0,1,2 と定義する。 Step3 な 𝑥𝑗 ≢ 𝑥𝑘 (mod 𝑛), 𝑑 ∣ 𝑛, 𝑥𝑗 ≡ 𝑥𝑘 (mod 𝑑), となるよう 𝑥𝑗 , 𝑥𝑘 があれば、 𝑑 ∣gcd(𝑥𝑗 −𝑥𝑘 , 𝑛) となり、 gcd(𝑥𝑗 −𝑥𝑘 , 𝑛)が𝑛 の真の因数となる。 例1 𝑓 𝑥 = 𝑥 2 + 1 , 𝑥0 = 1 を用いて91を素因数分解する。 Step1 Step2 Step3 𝑓 𝑥 = 𝑥2 + 1 𝑥0 = 1, 𝑥1 = 𝑓(𝑥0 ) = 12 + 1 = 2, 𝑥2 = 𝑓(𝑥1 ) = 22 + 1 = 5, 𝑥3 = 𝑓(𝑥2 ) = 52 + 1 = 26, gcd(𝑥3 − 𝑥2 , 𝑛) = gcd(21,91) = 7 よって、91の因子は7 手順確認 𝜌法の手順(改良版) Step1 ℤ/𝑛ℤから自分自身への計算が容易でℤ/𝑛ℤ全体に一 様 に分布するであろうと思われている写像、即ち、 𝑓 𝑥 = 𝑥2 + 𝑐 (c ∈ 1, 𝑛 − 3 )のような 整数係数の非常に単純な多項式を選択する。 Step2 ある特定の値 𝑥 = 𝑥0 (𝑥0 ∈ 0, 𝑛 − 1 )を選択し、 𝑥1 = 𝑓(𝑥0 ),𝑥2 = 𝑓(𝑓(𝑥0 )),𝑥3 = 𝑓(𝑓(𝑓(𝑥0 ))),⋯ と次々に繰り返し写像の値を計算する。即ち、 𝑥𝑗+1 = 𝑓(𝑥𝑗 ), j=0,1,2 と定義する。 Step3 うな 𝑥𝑗 ≢ 𝑥2𝑗 (mod 𝑛), 𝑑 ∣ 𝑛, 𝑥𝑗 ≡ 𝑥2𝑗 (mod 𝑑), となるよ 𝑥 , 𝑥 があれば、 𝑑 ∣ gcd(𝑥 −𝑥 , 𝑛) < 𝑛となり、 def IF_rho ( n, h = 100, i = 100 ) : if n < 2 : ←nが小さすぎ raise ValueError, "IF_rho ( n, h = 100, i = 100 ) n > 1 ?" if h < 1 or i < 1 : # no trial error raise ValueError, "IF_rho ( n, h = 100, i = 100 ) h, i > 0 ?" def f ( s ) : return ( s * s + c ) % n for j in range ( h ) : b=c=n-2 while c == b : c = random.randrange ( 1, n ) for k in range ( i ) : t = random.randrange ( n ) d = gcd.gcd ( t, n ) if 1 < d < n : return d r=f(t) d = gcd.gcd ( t - r, n ) while d == 1 : t, r = f ( t ), f ( f ( r ) ) d = gcd.gcd ( t - r, n ) if d < n : return d print “Failed to find IF” return None 𝑓 𝑠 を決め る cを選ぶ f ( s ) = s * s -2はダメ 初期値を選ぶ(カメ) 因数見つけた ←ウサギ 因数見つけた ※「因数が見つからなかった=𝑛は素数」 という訳 良い点 課題点 𝑓 𝑥 が果たしてℤ/𝑛でランダ 計算量が指数時間 1 4 1 4 𝑂(𝑛 lg 𝑛)=Õ(𝑛 ) で試行割算より少ない ムに分布する数列を生成す るかどうか 𝑐と初期値の値をどの範囲で 実際に計算する数列の項数 は 4 𝑛の数倍程度で、必要記 憶容量が数個で済む 選ぶかによって、因数が見 つかったり、見つからな かったりする。
© Copyright 2024 ExpyDoc