import numpy as np

#################################################
# EXO 1 - Produit de deux matrices carrées

def PROD(A,B,n):
    C = np.zeros([n,n]) # Initialisation de la variable C à la matrice nulle de M_n(R)
    for i in range(n):
        for j in range(n):
            for k in range(n):
                C[i][j] = C[i][j] + A[i][k] * B[k][j]
    return C

#################################################
# EXO 2 - Création de la matrice identité

def IDENT(n):
    C = np.zeros([n,n]) # Initialisation de la variable C à la matrice nulle de M_n(R)
    for i in range(n):
        C[i][i] = 1
    return C

# 2nde solution, plus expéditive

def IDENT2(n):
    return np.array([[1*(i==j) for j in range(n)] for i in range(n)])

#################################################
# EXO 3 - Puissances d'une matrice carrée

def PUISS(A,p,n):
    C = IDENT(n) # Initialisation de la variable C à la matrice identité de M_n(R)
    for compteur in range(p):
        C = PROD(C,A,n)
    return C

### FIN ###