素数判定法 (up 2/9)

Download Report

Transcript 素数判定法 (up 2/9)

素数判定法
東京都立大学理学部数学学科
中村研究室
0340465
市来 信吾
目標
多項式時間素数判定法の紹介
 計算数論システムNZMATHへの
実装と実験

はじめに


試し割り
1/ 2
 計算量→ O ( n lg lg
多項式時間の計算量
 Miller-Rabinテスト
 AKS
n lg lg lg n )
準備(ランダウの記号)
f ( x )  O ( g ( x )) 

x 0 , c , s.t. x  x 0  f ( x )  cg ( x )
f ( x )  O ( g ( x )) 
~

  0, f ( x )  O ( g ( x )
1 
)
素数判定法の種類[1/2]

決定性素数判定法(deterministic primality
test)

自然数n が「素数」か「否」か判定する
• 試し割り
• APR (Adleman-Pomerance-Rumely)
• AKS (Agrawal,Kayal,Saxena)
素数判定法の種類[2/2]

確率的素数判定法(probabilistic primality
test)

自然数n が「合成数」か「判定不能」か判定す
る
• Fermat テスト
• Solovay-Strassen テスト
• Miller-Rabin テスト

多項式時間アルゴリズム
Fermat の小定理
素数 p と任意の整数 a に対し
a  a (mod
p
p)
特に p | a ならば
a
p 1
 1 (mod
p)
Miller-Rabin(概要)
n 1  2 q
s
q
( n , q  odd, s  Z  0 )
2q
2
s 1
q
b , b ,..., b
n が素数  Fermatの小定理より
s
2 q
n 1
b
b
 1 (mod
b q
 1 (mod
 1 (mod
n ) , or
n ) がある
n)
Miller-Rabin(アルゴリズム)
[1/2]
入力:n  N , 2  b ( N )  n , k  N
出力:n は“合成数”or “判定不能”
{Step 1}
n -1  2 q (s, q  N )
s
{Step 2}
i  0, r  b
q
(mod
n)
{Step3}
if ( i  0 and r  1) or ( i  0 and r  n  1)
n は判定不能
, terminate
Miller-Rabin(アルゴリズム)
[2/2]
{Step 4}
i  i  1, r  r
{Step5}
if i  s
go to Step3
k 回反復
n は合成数
2
(mod n )
Miller-Rabin

拡張リーマン仮説(ERH)の下で決定
性素数判定法

計算量→

ERHの下で O (lg
4
n lg lg n lg lg lg n )
AKS(概要)
a  Z, n  N, n  2 , gcd ( a , n )  1 とする.
n が素数 , またそのときに限り次 式が成り立つ .
( X  a)  X
n
n
 a (mod n )
この式を以下のように 改良する .
( X  a)  X
n
n
 a (mod
高々 r  1次の多項式になる
X
.
r
 1, n )
AKS(準備)

n がperfectpower→
b
na


o r (n)
は法
(a, b  N 2 )
r での n の位数
オイラーの  関数  (n ) →
n 以下の自然数で互いに素な数の個数
AKS(アルゴリズム)[1/2]
入力:n  N
出力:n は“PRIME ”or “
COMPOSITE
”
{Step1}
if n is perfectpow
output
er
COMPOSITE
{Step2}
find the smallest
r suth that
o r ( n )  lg
{Step3}
if 1  gcd ( a , n )  n for some a  r
output
COMPOSITE
2
n
AKS(アルゴリズム)[2/2]
{Step4}
if n  r
output
PRIME
{Step5}
for a  1 to

if ( X  a )
output
 ( r ) lg n 
 X
n
 a (mod
COMPOSITE
{Step6}
output
n
PRIME
X
r
 1, n )
AKS(計算量)
~
3
Step1 :p 進 Newton 法を用いると O ( lg n )
~
Step2 :O ( lg
2
n lg r ) だが r  lg
n なので O ( lg
5
~
Step3 :Euclid の互除法を用いて
O ( r lg n )  O ( lg
6
n)
Step4 :O ( lg n )
~
Step5 :FFT を使えば多項式の冪は
O ( r  ( r ) lg n )  O ( lg
~
 O ( lg
~
10.5
3
~
O ( r lg
10.5
n)
n)
実際には r  O ( lg
2
~
n ) なので O ( lg
7.5
n)
2
n)
7
n)
実験

NZMATHをベースにMiller-RabinとAKS
を実装

各桁の素数10個の計算時間の平均を
算出

Core2Duo2.66GHz, 2GB
結果[1/2]
桁
Miller
(秒)
APR
AKS
6077.856
10
0.003
0.059
20
0.012
0.212
-
30
0.025
0.918
-
40
0.034
1.238
-
50
0.047
6.675
-
100
0.159
26.978
-
300
2.052
-
-
500
8.369
-
-
1000
54.156
-
-
結果(AKS) [2/2]
(秒)
桁
2
3
4
5
6
7
8
9
10
11
Step5
0.09
0.88
6.40
64.11
176.02
474.38
1109.12
2675.04
6017.75
12270.60
Total
0.18
1.37
7.49
67.89
182.52
485.93
1130.96
2711.54
6077.86
12367.45
結論と今後の課題

ERHは通常は正しいとされているので実
用的にはMiller-Rabinが有用

AKSの多項式計算部分の改良

HPの更新
以上で発表を終わります
ご清聴ありがとうございました