前回の記事
https://zenn.dev/ankoma/articles/eb922bfe69e03c
数論変換
前回の記事では、複素数体上で定義されるDFTおよびIDFTについて解説した。DFTの本質は1のN乗根であるeN−i2π=ωNの直交性
n=0∑N−1ωN(a−b)n={0N(a=b)(a=b)
によるものであるため、この性質(1の主N乗根とか主要根とかと呼ぶ)をもった数が存在する空間であればDFT (IDFT)を定義することができる。
1の主N乗根存在の必要十分条件については私はよくわかっていないが、ひとまず体上の1の原始N乗根であればよいようである(体ではない剰余環に存在することもある)。
すなわち任意の体上でDFT/IDFTを定義することができ、それこそが数論変換である。
Z/13Z上のNTT
1のN乗根と原始N乗根
Z/13Z=Z13は体であるから、NTTを定義可能である。まずこの体に、どんな1の(原始)N乗根が存在するのか考えてみよう。
正の整数ξと位数pに対して、p=ξN+1なら1の(原始)N乗根が存在することが知られている。これはつまり、a∈Z13\{0}に対してa13−1=1であるから、12の因数である{1,2,3,4,6}乗根が存在するということである。すなわち任意の元aは1の12乗根であり、a2は6乗根、a3は4乗根、a4は3乗根、a6は2乗根となる。
Z13\{0}の任意の元が1の12乗根なのだから、1の12乗根は当然12個ある。このうち原始12乗根はいくつあるだろうか?
上で述べたように、1の12乗根の中には6, 4, 3, 2, 1乗根が含まれており、これらは原始12乗根ではない。例えば1は明らかに12乗根ではあるが原始12乗根ではない。つまり、12乗根から(原始)6, 4, 3, 2, 1乗根を差っ引いたものが原始12乗根になる。
このような考えに基づいて原始N乗根だけを解に持つ方程式を構成することができ、これは円分多項式ΦNと呼ばれる。Φ12=x4−x2+1であるから原始12乗根は4個存在する(次数はオイラーのトーシェント関数で求められる)。
1の原始根と原始N乗根
実は位数qの有限体Fqに対する原始q−1乗根には原始根という特別な名前がついている。これは原始q−1乗根がFqの乗法群を生成する生成元となるためである。
上で述べたように原始12乗根は4つ存在するから、Z13の原始根も4つ存在することになる。原始根の具体的な計算方法は私はよくわかっていないが(すべての元を試していけばそれなりに高い確率で見つかるはず?)、とりあえず2,6,11,7の4つであることが天下り的にわかっている。
これらはそれぞれ、

こんな感じで4つの巡回群を生成する。左端と右端がくっついて円になっているイメージを持ってほしい。
DFTの記事で紹介したように、N乗根は単位円上をN等分する点であり、原始N乗根はω0=1から初めて最初に来る点であった。つまり


のように、有限体上でも単位円のような回転のイメージを持つことができ、DFTもNTTもほぼ同じであることがわかる。また1の原始12乗根は4つの巡回群で計4つ存在し、原始6乗根や3乗根は重複が存在するため2つしかないことがわかる。
1の原始N乗根の直交性
DFT(NTT)に対してIDFT(INTT)を行うためには、1の原始N乗根に直交性が必要なのであった。NTTでは複素数を使わないので、DFTのときのように複素平面上で位置ベクトルが0になるという直観的な説明をしていいのかわからない。代数的な証明についてはWikipediaの証明を引用しておくとして、Z/13Zの例でちゃんと直交していることを確認しておこう。
直交性とはつまり、行列
ωN0ωN0ωN0⋮ωN0ωN0ωN1ωN2⋮ωNn−1ωN0ωN2ωN4⋮ωN2(n−1)⋯⋯⋯⋯ωN0ωNN−1ωN2(N−1)⋮ωN(N−1)(N−1)
のすべての行ベクトルの組み合わせで内積が0になるということ(もしくは1行目以外の各行の要素の和が0になること)である。N=6として原始6乗根である4を持ってくると、
1111111431291013913911211211219319311091234
となり、1行目以外の行の要素の和が0になっていることはすぐにわかる。
素数べき体上のNTT
いつか書きたい
結局NTTとは何なのか
有限体上でやるDFTである。
NTTとその高速化(FFT)を一緒に解説するが多いため難しく感じるが、DFTとおなじ、というか整数を扱う分DFTよりも易しいくらいである。
浮動小数点数を使わないので、計算誤差がないという点でDFTより優れているともいえるが、この時点ではNTTはDFTと同じ計算量O(N2)であるため、実用上はメリットが少ない。
次は、DFT(NTT)によってどのような演算がどのような演算に写されるのか、そして高速化手法について解説する。
次回予告
畳み込み定理 -> FFT
参考文献
https://mathlog.info/articles/2658
https://tsujimotter.hatenablog.com/entry/primitive-root
https://ror.hj.to/ja/issei/entries/q8xbed-q1vnz79kwhjt/node
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10243660935
Discussion