# -*- coding: utf-8 -*-
"""
Created on Tue Jun 17 10:58:59 2025

@author: franc
"""

import numpy as np
import numpy.linalg as alg

def lagrange(n):
    V=np.zeros((n+1,n+1))
    for i in range(n+1):
        for j in range(n+1):
            V[i,j]=i**j
    B=np.array([k/(k+1) for k in range(n+1)])
    X=alg.solve(V,B)
    return X
    
def facto(n):
    if n==0:
        return 1
    else:
        return n*facto(n-1)
        
for n in range(1,7):
    X=lagrange(n)
    l=[X[i]*facto(n+1) for i in range(n+1)]
    print(l)
    
def eval(P,x):
    s=0
    for k in range(len(P)):
        s+=P[k]*x**k
    return s
    
for n in range(1,20):
    print(eval(lagrange(n),n+1))
    

    
    

    