pptx - 首都大学東京

Report
数論システムNZMATHに於ける
素因数分解法MPQSの性能評価
2012/1/25
首都大学東京 都市教養学部 理工学系 数理科学コース
08162894
川原未鈴
目次
1、素因数分解法MPQSとは?
2、既存のプログラムの性能評価
3、改良点
4、改良前・後のMPQSの性能比較
5、今後の課題
2
1. 素因数分解法MPQSとは?
MPQS(複数多項式二次篩)
素因数分解法の一つである二次篩法(QS)に改良を加え
さらに効率のよい方法として考えられたもの。
1984年 QS
71桁
1986年 MPQS
87桁
1994年 MPQS
129桁
(600人以上のボランティアと1600台のCPUを用いた)
3
複数多項式二次篩MPQS
基本原理
 2 ≡  2 (mod ),  ≢ ±(mod )となる(, )の組を見つける。
見つけたら
 −   +  ≡ 0 (mod ),  ±  ≢ 0(mod ) であるから
gcd( −  ,  ) を計算することで  の約数が求まる。
4
二次篩QS (例:  =3937)
(1)  =  2 − 
(2)因子基底
の平方剰余から2つとる
 = {2,3}
平方剰余


≔ 1( ≡  2 (mod )となる ∈ ℤが存在)
なぜ
平方剰余?
5
  = 2 − 
を素数とすると
∣ 
⟺  2 ≡ (mod )

⟺  =1
 2 ≡ (mod )
の解を考える
(3)篩い  =3937
  =  2 − ,
=
 ± ,  = 1,2, ⋯ を考える
3
632 −  = 32
0
642 −  = 159
652 −  = 288
0
0
662 −  = 419
0
672 −  = 552
0
1
682 −  = 687
0
1
692 −  = 824
702 −  = 963
0
0
1
712 −  = 1104
0
1
⋮
6
32
33
2
3個おき
1
1
2
2
32 個おき
22
(3)因子基底だけで表される  をとってくる
632 −  = 32 = 25
652 −  = 288 = 25 ∙ 32
(4)組み合わせてかける( 2 ≡  2 (mod ))←ガウスの消去法
(63 ∙ 65)2 ≡ (25 ∙ 3)2 mod 
(5) gcd( −  ,  ) を計算
gcd 63 ∙ 65 − 25 ∙ 3,  = 31
∴ 3937 = 31 ∙ 127
7
二次篩との違い:篩の対象となる多項式を複数とれる
 =  2 − 4 となる , ,  を用いて   =  2 +  +  … ① とする
・二次式  の係数を変えても
同じ因子基底で篩にかけることが出来る
①の式に両辺4をかける
4  = 42  2 + 4 + 4
= (2 + )2 −2 + 4
= (2 + )2 −
・篩い処理が完全に並列処理できる
8
 ∣  
⟺ (2 + )2 ≡ (mod )

⟺
=1

(因子基底は二次篩と同じ)
MPQSの流れ
(1)まず  を決める。このは ≡ 1(mod 4)をみたし、


= 1,  ∈ なる がなるべく多く取れるものが望ましい。
とりわけ

2
= 1とするには ≡ 1(mod 8)となるを選ぶ。
(2)多項式を決定。 (係数を決定)
(3)篩いを行い各 ∈ に対して  ≡ 0 (mod  )なるを求めて、
‐smoothな  を探す。
(4)‐smoothなものが必要な個数集まるまで(2),(3)を
何回か繰り返し、その中から   が平方数になるようなものを探す。
(ガウスの消去法)
(5) 2 ≡  2 (mod )が求められるので、
9
gcd( − , )が自明でない因数ならば終了。
(1) が奇合成数、 2 − 4 = 
⇒
2 ≡ 1(mod 4)
∴  ≡ 1(mod 4)としなければならない。
そこで、 ≡ 3(mod 4)となる 
に対しては
 ≡ 1(mod 4)となる小さな  を求める。
このは


= 1,  ∈ なる がなるべく多く取れるものが望まし
い。
とりわけ
10

2
= 1とするには ≡ 1(mod 8)となるを選ぶ。
2.既存のMPQSの性能評価
性能評価①
・NZMATHにあるmpqs(平成17年卒の熊木幸司さんが書かれたも
の)で実験・比較
・一つのCPUを使って約6時間で
どのくらいの桁数まで素因数分解できるか調べる
・実験の対象となった合成数は
ほぼ同じ桁数の素数2つの積であるような数とした
・50~55桁の約10個の合成数に対し,桁ごとの平均時間を算出
11
実験環境
 ハードウェア
CPU:
AMD Phenom(tm) Ⅱ X6 1090T
Processor (3.2GHz 6cores)
Memory: 8GB
Disk:
HDD 2TB, SSD 64GB
 システム
Server:
Windows Server 2008 R2 Standard
Emulator: VMware(R) Player Ver.3.1.3
Linux OS: CentOS 5.5
(CPU: 4cores, Memory: 2GB,
HDD: 200GB )
 Python: 2.7.1
 NZMATH: 1.1.0
以下実験結果はすべてsec
12
実験結果
桁数
50桁
51桁
52桁
53桁
54桁
55桁
平均
9331.4 11212.8 15699.9 19949.8 21601.6 24808.2
約7時間弱で55桁の合成数を素因数分解できることがわかった
13
性能評価②
・NZMATHにあるmpqsで実験
・過程を
(ⅰ)係数を決める
(ⅱ)篩う
(ⅲ)ガウスの消去法
(ⅳ)total に分けてそれぞれの時間を算出
・ 10、15、20、25、30、35、40桁の合成数について実験
・それぞれの実験の対象となった合成数は
ほぼ同じ桁数の素数2つの積であるような数とした
・各桁の10個の合成数に対し,それぞれの平均時間を算出
14
実験結果
10桁
15桁
20桁
25桁
30桁
35桁
40桁
係数決め
0.001
0.006
0.048
0.243
0.740
5.748
19.734
篩い
0.008
0.048
0.148
1.009
3.743
17.809
80.105
ガウスの消去法
0.002
0.004
0.052
0.289
1.683
10.049
85.323
Total time
0.019
0.073
0.358
1.983
8.340
43.080 242.986
その他の時間
0.008
0.015
0.110
0.443
2.175
9.474
・3つの過程の中で最も時間がかかっているのは篩いの部分
・3つの過程以外のところでも多くの時間がかかっている
15
57.823
3、改良点
≪問題箇所≫
(1) ≡ 1(mod 4)をみたし、


= 1,  ∈ なる がなるべく
多く取れるを決める。

とりわけ
= 1とするには ≡ 1(mod 8)となるを選ぶ。
2
≪改良後≫
≪改良前≫
 ≡ 1 (mod 8)の場合にはすべて
 ≡ 1(mod 8)をとってくる。
16
つまり ≡ 1 (mod 8)の場合には

= 1, が = 3,5,7,11,13

すべてに成り立っていても ≡
1(mod 8)をとってくる。
 ≡ 1 (mod 8)
かつ
(ⅰ)


= 1が = 3,5,7,11,13


= 1が = 3,5,7,11,13
すべてに成り立っていたら = 1
(ⅱ)
で一つでも成り立っていなかった
ら ≡ 1(mod 8)をとってくる。
4、改良前・後の性能比較
・改良前と改良後のプログラムで実験・比較
・ 10、15、20、25、30、35、40桁の合成数について実験
・それぞれの実験の対象となった合成数は
素数×素数×  となるものを使用。
・各桁の約10個の同じ合成数に対し,改良前・後のそれぞれの
平均時間を算出
17
実験結果
桁数
before
after
10
0.021
0.016
15
0.101
0.031
20
0.424
0.223
25
1.942
0.841
30
11.602
5.513
35
48.827
21.658
40
251.060
141.346
 が mod 8 で 1 ,かつ 法3,5,7,11,13の平方剰余の場合、
既存のものより圧倒的に速くなった
18
5、今後の課題
・Block Lanczos法の実装
・・・ガウスの消去法よりも効率の良い方法なので
・篩の行程でLarge Primeを取り入れた篩の実装
‐smoothにある程度近いものの残りの因子を
因子基底の中に含ませてしまう方法
19
参考文献
・中村憲.数論アルゴリズム.2009.
・Richard Crandall and Carl Pomerance.
Prime numbers.Springer-Varlag,New York,2001.
・David M.Bressoud.
Factorization and Primality Testing.Springer-Varlag,New York,1989.
・熊木幸司.
複数多項式二次篩の数論システムNZMATHへの実装とその考察,2005.
20
ご清聴ありがとうございました。
21

similar documents