高速乗算法の設計と実装(5)

梅谷 武
作成:2001-09-24 更新:2005-04-20
高速乗算法(5)は係数を2語と1語に分解する方法である。
IMS:20010924001; NDC:412.1; keywords:高速乗算法;
目  次
1. 係数の分解
2. 高速乗算法(5)
参考文献
1. 係数の分解
1.1 数列T(n)
 高速乗算法(1)(→[F3])で導入したT(n)を再度使用する。
T(n)=22t-2t+1,t=2n,n0
とおくと
22K-2K+1+1T(k),K=2k
が成り立つ。T(n),n=0,1,2,3,4,5,6を素数判定すると次のようになる。
T(0)
=
2(2-1)+1=3:素数
T(1)
=
22(22-1)+1=13:素数
T(2)
=
24(24-1)+1=241:素数
T(3)
=
28(28-1)+1=65281=97*673:合成数
T(4)
=
216(216-1)+1=4294901761=193*22253377:合成数
T(5)
=
232(232-1)+1=18446744069414584321:素数
T(6)
=
264(264-1)+1:合成数
T(5)が素数になるのでこれを使用する。T(5)を法とする整数の剰余環ZT(5)は有限体となるが、この元は1語を32bitとするとき2語で表現できる。この積は
A264+B,0≦A,B≦264-1
と128bit長で表現されるが、このとき、
A264+B
=
(264-232+1)A+(232-1)A+B
(232-1)A+B(mod T(5))
より除算を使わずに剰余演算ができる。
1.2 T(5)を使った離散フーリエ変換の型
 T(5)は素数であり、FT(5)上に長さNの離散フーリエ変換が存在するための必要十分条件は、
N|232(232-1)
であるが、
N=2n,0<n≦30
はこの条件を満たし、さらにこのときT(5)の最小原始根7を使ってFT(5)上の1の原始N乗根を
7t,t=232-n(232-1),0<n≦30
と表現することができる。
1.3 数列V(n)
 T(5)によって係数の評価式
crN(232-1)2=N(264-233+1)
264-233+1
を2語で表現できる素数によって上から押さえることができた。次に
N=2n,0<n≦30
を1語で表現できる素数によって上から押さえることを考える。
V(n)=2n(232-n-1)+1,0<n<32
とおくとこれは1語で表現できる。この中で素数となるものは、
V(20)
=
220(212-1)+1=4293918721
V(30)
=
230(22-1)+1=3221225473
の2つである。離散フーリエ変換の長さをなるべく長くするためにV(30)を使う。
231V(30)=232-230+1
が成り立っているので、
N=2nV(30),0<n≦30
である。V(30)を法とする整数の剰余環ZV(30)は有限体となるが、この元は1語で表現できる。この積は
A232+B,0≦A,B≦232-1
と64bit長で表現されるが、このとき、
A232+B
=
(232-230+1)A+(230-1)A+B
(230-1)A+B(mod V(30))
より除算を使わずに剰余演算ができる。
1.4 V(30)を使った離散フーリエ変換の型
 V(30)は素数であり、FV(30)上に長さNの離散フーリエ変換が存在するための必要十分条件は、
N|230(22-1)
であるが、
N=2n,0<n≦30
はこの条件を満たし、さらにこのときV(30)の最小原始根5を使ってFV(30)上の1の原始N乗根を
5t,t=230-n(22-1),0<n≦30
と表現することができる。
2. 高速乗算法(5)
2.1 高速乗算法(5)の構造
Step 1. 数のP進表現
 基数をP=232とし、長さを
N=2n,0<n≦32
とする。正の整数a,bが次のようにP進表現されるものとする。
a
aN-1PN-1++a1P+a0,0≦ai<P
b
bN-1PN-1++b1P+b0,0≦bi<P
この積について0≦ab<PNが成り立つと仮定する。
Step 2. 多項式としての積の計算
 PK≡1(mod PN-1)より、
cabN-1
Σ
r=0
(
Σ
s+t≡r(mod N)
asbt)Pr
(mod PN-1)
となる。この係数cr=s+t≡r(mod N)asbtの大きさを評価すると、
0crN(232-1)2U(5)=232(264-1)+1
となる。
Step 3. 離散フーリエ変換による係数の計算
 crは、(N, FU(5), ζ), ζ=11t, t=232-n(264-1)型の離散Fourier変換を利用して次のように計算する。
F(a)k
=
N-1
Σ
s=0
asζsk  (mod U(5))
F(b)k
=
N-1
Σ
t=0
btζtk  (mod U(5))
cr
=
N-1N-1
Σ
k=0
F(a)kF(b)kζ-kr  (mod U(5))
Step 4. 桁上げ処理
 最後にcr, r=0,…,K-1に桁上げ処理を施すことで、c=abP進表現が得られる。
参考文献
高速乗算法
[F1] 梅谷 武, 離散Fourier変換
[F2] 梅谷 武, ストラッセン-ショーンハーゲ法
[F3] 梅谷 武, 高速乗算法の設計と実装(1)
[F4] 梅谷 武, 高速乗算法の設計と実装(2)
[F5] 梅谷 武, 高速乗算法の設計と実装(3)