Числовое теоретическое преобразование умножения смещено
Я работал над кодом для умножения полиномов с использованием NTT (FFT), и я сделал 2 разных реализации и использовал существующие для проверки, например: https://www.nayuki.io/page/number-theoretic-transform-integer-dft, https://github.com/iblue/ntt.
Проблема в том, что все результаты кажутся сдвинутыми один раз влево (умноженными на x) следующим образом:
0 0 1 1 (x + 1)
*
0 0 1 1 (x + 1)
=
1 2 1 0 (1x^3 + 2x^2 + x) // Should be 0 1 2 1
Кроме того, тривиальный случай 1*1 неверен так же:
0 0 0 1 (1)
*
0 0 0 1 (1)
=
0 0 1 0 (x) // Should be 0 0 0 1 (1)
Я понятия не имею, почему это происходит, и это не упоминается ни в одной из статей, которые я до сих пор читал.
Что мне не хватает?