素数判定法
東京都立大学理学部数学学科
中村研究室
0340465
市来 信吾
目標
多項式時間素数判定法の紹介
計算数論システムNZMATHへの
実装と実験
はじめに
試し割り
1/ 2
計算量→ O(n lg lg n lg lg lg n)
多項式時間の計算量
Miller-Rabinテスト
AKS
準備(ランダウの記号)
f ( x) O( g ( x))
x0 , c, s.t. x x0 f ( x) cg( x)
f ( x) O ( g ( x))
~
1
0, f ( x) O( g ( x)
)
素数判定法の種類[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
(n, q odd, s Z0 )
2 s 1 q
b , b , . . . , b
n が素数 Fermatの小定理より
q
2q
n1
b b 1 (mod n)
q
b 1 (mod n) , or
2s q
1 (mod n) がある
Miller-Rabin(アルゴリズム)
[1/2]
入力:n N , 2 b ( N ) n , k N
出力:n は“合成数”
or“判定不能”
{St ep1}
n - 1 2 q ( s, q N )
s
{St ep2}
i 0, r b
{St ep3}
q
(mod n)
if (i 0 and r 1) or (i 0 and r n 1)
nは判定不能 , t erminat e
Miller-Rabin(アルゴリズム)
[2/2]
{St ep4}
i i 1, r r
2
{St ep5}
if i s
go t o St ep3
k回反復
nは合成数
(modn)
Miller-Rabin
拡張リーマン仮説(ERH)の下で決定
性素数判定法
計算量→
ERHの下で
4
O(lg n lg lg n lg lg lg n)
AKS(概要)
a Z, n N, n 2, gcd(a, n) 1とする.
n が素数 , またそのときに限り次式が成り立つ.
( X a ) X a (mod n)
n
n
この式を以下のように改良する.
( X a ) X a (mod X 1, n)
n
n
高々 r 1次の多項式になる.
r
AKS(準備)
n がperfectpower→
b
o r (n) は法 r での n の位数
na
(a, b N2 )
オイラーの 関数 (n) →
以下の自然数で互いに素な数の個数
n
AKS(アルゴリズム)[1/2]
入力:n N
出力:n は“
P RIME”or “
COMP OSIT E”
{St ep1}
if n is perfect pow
er
out put COMP OSIT E
{St ep2}
find t hesmallest r sut h t hato r (n) lg 2 n
{St ep3}
if 1 gcd(a, n) n for somea r
out put COMP OSIT E
AKS(アルゴリズム)[2/2]
{St ep4}
if n r
out put P RIME
{St ep5}
for a 1 t o
(r ) lg n
if ( X a ) n X n a (mod X r 1, n)
out put COMP OSIT E
{St ep6}
out put P RIME
AKS(計算量)
St ep1:
p進Newt on法を用いるとO ~ (lg 3 n)
St ep2:
O ~ (lg 2 n lg r )だがr lg 5 n なのでO ~ (lg 7 n)
St ep3:
Euclidの互除法を用いて
O (r lg n) O (lg 6 n)
St ep4:
O (lg n)
St ep5:
FFTを使えば多項式の冪は O ~ (r lg 2 n)
O (r (r )lg n) O (lg
~
3
~
10.5
n)
O ~ (lg10.5 n)
実際には r O (lg 2 n) なので O ~ (lg 7.5 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の更新
以上で発表を終わります
ご清聴ありがとうございました
© Copyright 2026 ExpyDoc