整数リングでFFTを使用して、長い整数に任意の数字のベースを掛ける必要があります。n = 2^k
オペランドは常に一部の長さk
であり、畳み込みベクトルには2n
コンポーネントがあるため2n'th
、ユニティの原始根が必要です。
私は効率の問題に特に関心がないので、Strassen & Schönhage のアルゴリズムを使用したくありません。基本的な畳み込みを計算し、次にキャリーを計算するだけです。
多くの数学者にとっては単純に思えるかもしれませんが、私の代数の理解は本当によくないので、たくさんの質問があります:
2^n + 1
整数環モジュロ(おそらく複合) で FFT を実行する場合と、いくつかの素数を法とする整数 FIELDS でFFT を実行する場合の本質的な違いやニュアンスは何p
ですか?
私がこれをお願いするの2
は、(2n)th
がそのようなリングにおける団結の原始根だから2^n == -1 (mod 2^n+1)
です。対照的に、整数フィールドでは、そのような原始根を検索する必要があります。
しかし、FFT にそのような形式のリングを使用することを妨げる他のニュアンスがあるかもしれません。整数環を選んだ場合
2^n
、この体に 1 乗根が存在するための十分条件は何ですか?
より小さい次数の 1の他のすべての2^k
乗根は、この根を 2 乗することで得られますよね?.環のモジュロによる乗算には、どのような本質的な制限が課せられますか? たぶん、それらの長さ、数値ベース、さらには乗算に使用される数値型についてです。
畳み込みの係数がモジュロ演算によって削減されると、情報の損失が発生する可能性があると思います。それは本当ですか、なぜですか?.. これを回避できる一般的な条件は何ですか?- プリミティブ型の動的リスト (つまり
long
) だけで、FFT ベクトル、その積、および畳み込みベクトルに十分である可能性はありますか? それとも、念のために係数を変換する必要がBigInteger
ありますか (そして、本当に必要な場合の「ケース」とは何ですか)?
これらの質問に対する一般的な回答に時間がかかりすぎる場合は、次の条件での回答に特に満足します。2^30
フィールド Z_70383776563201までの順序統一の原始根の表を見つけました。
http://people.cis.ksu.edu/~rhowell/calculator/roots.html
したがって2^30
、長さの数を乗算するために th root of unity を使用する場合2^29
、考慮すべき精度/アルゴリズム/効率のニュアンスは何ですか?..
よろしくお願いします!最良の回答には報奨金を授与します - いくつかの例を手伝うことを検討してください。