Мне нужен исходный код C ++ для интерполяции Лагранжа в поле. Поэтому, учитывая n пар (x, y), я могу построить многочлен над полем. Мой код, как показано ниже, но он не выводит правильный результат:
bigint* interpolate (int n, bigint *x, bigint *y,bigint N) {
int d,i;
bigint temp,temp2,temp3;
for (d = 1; d < n; d++) {
for (i = 0; i < n - d; i++) {
int j = i + d;
mul( temp,x[j], y[i]);
mpz_mul( temp2,x[i], y[i+1] );
sub( temp2,temp2,temp );
sub( temp3, x[j], x[i] ); temp3=x[j]-x[i]
invert(temp3,temp3,N);
mul(y[i] ,temp2, temp3 );// y[i]=temp2 * temp3
}
}
return y;
}
Здесь N — модуль, n — количество пар, x и y — массивы больших целых чисел, содержащие элементы x_i и f (x_i) = y_i.
Задача ещё не решена.