Transcript pptx - TNT

PRIMES決定性アルゴリズム
従来の代表的方法
伴地 慶介
a.試し割り算
● nP
 d 


1, n
p  P
n
s.t d | n
s.t p | n
を 利用.
簡単かつ確実なアルゴリ ズムだが、 計算量が指数時間O
 n で
あり 小さ な n でないと 使い物になら ない.
・ 割り 算が最大 ( n 1) / 2 回. n 以下の整数の除算計算量はO(lg 2 n)BCで,
注意1.2.3(p16)の既知最速算法を 用いればO(lg n lg lg n lg lg lg n)  O(lg n)BC.
よ っ て試し 割り 算によ る PRIMESの入力 n に対する BCは,
O( n lg n lg lg n lg lg lg n)  O( n lg 2 n)  O( n ).
b.既約剰余類群の利用
● 定理 2. 2. 4 ModPPw と (2.11) によ る 同値性
n  P   / n は位数 n 1 の巡回群 … (i)

こ れを利用する.し かし 制限があり , 条件を現実に計算可能な形に
言い直さ なければなら ない.
例えば, n  P  (n 1)!  1 mod n
し かし こ れは階上計算が指数時間 O(n)BC にな る.
こ こ で n 1 の素因数全体 S : { p  P | p | n 1}
がわかる と き に注目し , (ⅱ) を次に言い替える .
● nP
 b 
≪参考≫
・ 定理2. 2. 4( ModPPw)
p  P, e 
 g

/p
e 1
 {g1 g  /( p/21)p
※ (4.3) よ り bn1  1 mod n の計算量は O(lg2 n lglg n lglglg n).
こ の計算を各 p に対し 計算する ので, 一つの b に対する 計算量は
  n  :
#


( p 2ま たはe2)
/2
( p 2,e3)
e2
・ p43( 2. 11)
s.t bn1  1 mod n , b(n1)/ p  1 mod n  p  S  … (ⅱ)
O( #S lg2 n lglg n lglglg n)    #S lg2 n である.

s.t
e 
/ n

 1
  n   n1  
p
pP 
p|n
既約剰余類利用の問題点
● 問題①: ど う やって b を探すか
 各種PsPTによ り , 既にn  Pの可能性が高い.
 n  Pなら b は法 n の原始根PRP.
 算法2.2.3(PRP)の手順で早く 見つかる .
● 問題②: n 1の素因数の集合Sの計算
 整数分解問題は指数時間….

(n 1 の部分的 PF T : { p  P | p | m} (m  , m | n 1, m  n )

ができ ている と き に, (4.8) を一般化し た n-1テス ト と いう も のが考え出さ れている . )
よ って素因子がわかっている
次の特殊なケース を考える こ と にする .
・二の二べき乗+1(フェルマ数)の素数判定
●フ ェ ルマ数 Fm : 22  1  n (m  )
も し nP
( n 1)(31)/4  n 
 3
n
     1

 3   3   1 であ り ,
n
 
   
m
ま た n  P  3 
 ( n)
3
3
n 1
/ n  に対し ,

3
m
22
 1 mod n  .
 3
n  P     3( n1)/2  mod n 
n
2m
 1  32
1
PR で (ⅱ) を 満た す.
n  , a   / n   a ( n)  1 mod n 

・ 定理2.3.2(XQRL)
任意の奇数 m, n  ,gcd(m, n)  1に対し ,
 m  n 
( m1)( n 1)/ 4
 n  m   (1)
  
・ (ⅱ)
b

s.t
bn1  1 mod n  , b( n1)/ p  1 mod n   p  S 
 mod n 
つま り b  3 は位数 2 べき の巡回群 
≪参考≫
・ 定理2.2.2
/ n の

算法4.3.1(Pepin,T.,1877)
● 入力: m  .
● 出力「: Fm  P」 ま たは「 Fm  P」
● 手順 :も し 3( Fm 1)/2  1 mod Fm なら 「 Fm  P」
と 判定し て終了. さ も なく ば「 Fm  P」 と 判定し て終了.
n  Fm : 2  1 よ り
S : { p  P | p | n 1}  {2}.
2m
3( Fm 1)/2  1 mod Fm  
m
22 1
3
3
( n1)/2
 1 mod n , 3
よ って n  P  b 
を満たす.
m
22
 3n1  1 mod n
s.t bn1  1 mod n  , b( n1)/ p  1 mod n   p  S 
from amod import Amod as Amod
def Fm(m):
if m==0:
return '3 is Prime'
n=pow(2,pow(2,m))+1
if Amod(pow(3,(n-1)//2,n),n)==-1:
return '%d is Prime' %(n)
else:
return '%d is not Prime' %(n)
c.有限体の乗法群の利用
・ n  P のと き
Fn  / nに対し ,
Fn2  {a  bx | a, b  Fn , x は Fn 上既約二次多項式の解}
が考えら れ,
 
乗法群 Fn2

は位数 n2 1  (n  1)(n 1) の巡回群なので,
位数が n  1 や n 1 の元を持つ.
・ こ の事実と 線形回帰数列を組み合わせて
n  1テ ス ト , n2 1テス ト , さ ら に理論的には
有限体テス ト と いう 広いアルゴリ ズムも 考え ら れる .
•二の素べき乗-1(メルセンヌ数)の素数判定
● メ ルセンヌ 数 M p : 2 p 1  n ( p  P )
q を M p の素因子と する.
数列 u1 : 4, ui 1 : ui 2  2 (i  )
を考える.
yw  0  mod q  と なる 最小の



n

n
・ 2  3 : xn  3 yn , 2  3 : xn  3 yn

  
    
n
n
1
xn 
2 3  2 3
2
n
n
1
yn 
2 3  2 3
2 3
xnm  xn xm  3 yn ym , xnm  xn xm  3 yn ym
ynm  xn ym  xm ym , ynm   xn ym  xm ym
こ れよ り x2n  2xn 1.
帰納法によ り , ui  2x2i1 .
2
x 2 p2  0  mod M p 
y( q1)/2 y( q1)/2  0  mod q  .
w は 2w  q  1.
yw  0  mod q   ykw  0  mod q  .
yn  0  mod q   ynkw  0  mod q  .
よ って n は w の倍数.
yn  0  mod q   w | n
M p | x2 p2 , q | M p  q | x2 p2 .
y2 p1  2x2 p2 y2 p2  0  mod q 
w  2 p1.
2  2 p1  q  1  M p  1  2 p
 q  M p  M p  P.
算法4.3.2(Lucas-Lehmer)
● 入力: p  P2
● 出力: 判定「 M p  P」 ま たは判定「 M p  P」
● 手順: も し u p1  0  mod M p なら 「 M p  P」
と 判定し て終了. さ も なく ば「 M p  P」 と 判定し て終了.
※こ の数の重要性と 応用については, 最終の§7. 4参照.
そこ では p, M p  P と なる こ と を利用し た, 高性能な
擬似乱数生成法が紹介さ れている.
def Mp(p):
def u_t(t):
u=4
for i in range(1,t):
u=pow(u,2)-2
return u
Mp=pow(2,p)-1
if u_t(p-1)%Mp==0:
return '%d is Prime' %(Mp)
else:
return '%d is not Prime' %(Mp)
d.指標和の利用
・ 計算量が極めて多項式時間に近い( lnO(lnlnln n) n) ,
指数時間のPRIMES決定性アルゴリ ズムで, その
アルゴリ ズムは複雑になり ,実装の際に予見し ない
バグを含む可能性が高い.
・ 絶対擬素数テス ト
from gcd import gcd as gcd
import random
def APsPT(n,k):
kx=k
while k!=0:
b=random.choice(range(2,n-1))
if gcd(b,n)>1:
return '%d is not Prime' %(n)
elif pow(b,n-1,n)!=1:
return '%d is not Prime' %(n)
k=k-1
return(%d is APsPor %d is Prime( probability :1  2(  k )))%(n, n, kx)
・ 平方剰余基準テス ト
from gcd import gcd as gcd
from amod import Amod as Amod
from xqrs import XQRS as XQRS
import random
def QRCT(n,k):
kx=k
while k!=0:
b=random.choice(range(2,n-1))
if gcd(b,n)>1:
return '%d is not Prime' %(n)
elif not Amod(pow(b,(n-1)//2),n)==XQRS(b,n):
return '%d is not Prime' %(n)
k=k-1
return%d is Prime( probability :1  2(  %d ))%(n, kx)
・ 強擬素数テス ト
import random
from gcd import gcd as gcd
def SPsPT(n,k):
e=0
m=n-1
while 1:
if not m & 1:
e+=1
m=m//2
else:
break
kx=k
while k!=0:
b=random.choice(range(2,n-1))
if gcd(b,n)>1:
return '%d is not Prime' %(n)
else:
return '%d is not Prime' %(n)
k  k 1
return%d is Prime( probability :1  4(  %d ))%(n, kx)