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

梅谷 武
作成:2001-09-20 更新:2005-04-20
高速乗算法(3)において係数を分解しない方法の実験を行なったが、剰余演算の語長が6語であったため、2語と4語に分解した高速乗算法Uよりかなり計算量が多くなった。高速乗算法Wは係数を分解しないで剰余演算の語長を3語にする。
IMS:20010920002; NDC:412.1; keywords:高速乗算法;
目  次
1. 高速乗算法(4)の設計
2. 高速乗算法(4)
参考文献
1. 高速乗算法(4)の設計
1.1 数列U(n)
 係数の評価式
cr
N(2K-1)2=N(22K-2K+1+1)
K
=
25=32
N
=
2n,0<n≦32
から
N(22K-2K+1+1)p
なる素数pであって、Fpの演算、すなわち法pの剰余演算が高速に計算できるものを探す。
U(n)=23t-2t+1,t=2n,n0
とおくと
2K(22K-2K+1+1)U(k),K=2k
が成り立つ。U(n),n=0,1,2,3,4,5,6を素数判定してみる。
U(0)
=
2(22-1)+1=7:素数
U(1)
=
22(24-1)+1=61:素数
U(2)
=
24(28-1)+1=4081:合成数
U(3)
=
28(216-1)+1=16776961:素数
U(4)
=
216(232-1)+1=281474976645121:合成数
U(5)
=
232(264-1)+1:素数
U(6)
=
264(2128-1)+1:合成数
U(5)、すなわちK=25=32の場合に素数になっているが、
A296+B,0≦A,B≦296-1
と表現するとき、
A296+B
=
(296-232+1)A+(232-1)A+B
(232-1)A+B(mod U(5))
となり除算を使わずに3語の剰余演算ができる。
1.2 離散フーリエ変換の型
 p = U(5) = 232(264-1)+1とする。これは素数であり、
crp
という係数の評価式が成り立つ。さらにFp上に長さNの離散フーリエ変換が存在するための必要十分条件は、
N|232(264-1)
であるが、
N=2n,0<n≦32
はこの条件を満たし、さらにこのときpの最小原始根11を使ってFp上の1の原始N乗根を
11t,t=232-n(264-1),0<n≦32
と表現することができる。
2. 高速乗算法(4)
2.1 高速乗算法(4)の構造
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)