素数判定法 (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
na
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の更新
以上で発表を終わります
ご清聴ありがとうございました