diff --git a/polynomial.py b/polynomial.py index 689002daa5148d0c7b4e3caef3363c7bed5c24b8..85f8d61c6215340a7ca35424963ca1977cc7f526 100644 --- a/polynomial.py +++ b/polynomial.py @@ -1,3 +1,4 @@ +import math from numbers import Number import itertools import json @@ -77,6 +78,7 @@ class Polynomial: str_value = "" for i, x in enumerate(reversed(self.value)): + x = math.ceil(x) if x == 0: continue if i != 0: @@ -130,7 +132,29 @@ def modular_inverse(a, n): def compute_lagrange_polynomial(points, prime_number): - pass + nb_points = len(points) + lagrange = Polynomial((0,)) + + # Create a polynomial for each points + for i in range(nb_points): + poly_li = Polynomial((1,)) + divider = 1 + + # Compute the lagrange polynomial + for k in range(nb_points): + if k != i: + dividend = Polynomial((-points[k][0], 1)) # x - value + + poly_li *= dividend + divider *= (points[i][0] - points[k][0]) + + divider = 1 / divider + point_yi = points[i][1] + poly_li = poly_li * Polynomial((divider,)) * Polynomial((point_yi,)) + + lagrange += poly_li + + return lagrange def reed_solomon(points, data_length, last_error_index, prime_number):