Нахождение полиномиальных коэффициентов (Java) - PullRequest
1 голос
/ 25 февраля 2020

У меня N-1 (N - степень 2) чисел a<sub>1</sub>,a<sub>2</sub>…a<sub>N-1</sub> в мире модов p (где p - большое простое число)

Моя цель - чтобы найти сумму всех возможных k -группировок (ровно k из чисел, умноженных вместе, mod p), но мне не дано ни одно из значений. Вместо этого мне даны значения p, r и N из приведенного ниже уравнения.

for all 0 <= j < N, (r<sup>j</sup>+a<sub>1</sub>)(r<sup>j</sup>+a<sub>2</sub>)…(r<sup>j</sup>+a<sub>N-1</sub>)

Я также знаю следующее

r<sup>N</sup> &equiv; 1 mod p

Для всех 1 <= j < N, r<sup>j</sup> != 1 mod p

Суммирование от j = 0 до N -1 из r<sup>j</sup> &equiv; 0 mod p

До сих пор я понял следующее

Если мы скажем, что результаты умножения входных данных = y и используют N = 4 в качестве примера, при срыве получим уравнение

y<sub>j</sub> &equiv; r<sup>3j</sup> + b<sub>1</sub>r<sup>2j</sup> + b<sub>2</sub>r<sup>j</sup> + b<sub>3</sub>

где b<sub>k</sub> это сумма всех возможных k -группировок (ответ, который я ищу)

Я также знаю, что у меня есть форма значения балла (r<sup>j</sup>, y<sub>j</sub>)

Пока все Я пытался (умножение на матрицу P<sup>-1</sup>(x), интерполяция Лагранжа) не дал мне полезного ответа, у меня нет идей относительно того, как рассчитать эти коэффициенты, что означает, что я даже не могу начать кодировать программа для этого.

Пример, из которого я должен работать, дает следующую информацию (a<sub>1</sub> = 6, a<sub>2</sub> = 13, a<sub>3</sub> = 30, но мне не нужна эта информация для ее решения )

p = 53

r = 30

y1 = 17

y2 = 24

y3 = 44

y4 = 0

и мой вывод должен быть

b1 = 49

b2 = 12

b3 = 8

У кого-нибудь есть какие-либо предложения? Я знаю, что FFT может быть вовлечен, потому что мы узнали об этом в то время, но я не могу найти использование для него, которое не оставляет меня с воображаемыми числами.

EDIT: исправлено форматирование

...