def get_least_squares_value(value, value_function, m):
    B = np.zeros((m, m))
    f = np.zeros((m, ))

    for i in range(m):
        for j in range(m):
            sum = 0
            for k in range(n):
                sum += pow(get_x(k), i + j)

            B[i, j] = sum

    for i in range(m):
        sum = 0
        for k in range(n):
            sum += value_function(get_x(k)) * pow(get_x(k), i)
        f[i] = sum

    solution = np.linalg.solve(B, f)

    p = Polynomial(m - 1, np.flip(solution, 0))

    return p.get_result_horner(value)