In [2]:
from __future__ import print_function, division

Question 1

In [3]:
def somme(A, B):
    C = []
    for i in range(4):
        Ai = A[i]
        Bi = B[i]
        row = [Ai[j]+Bi[j] for j in range(4)]
        C.append(row)
    return C
In [4]:
X = [[56, 39,  3, 41],
     [23, 78, 11, 62],
     [61, 26, 65, 51],
     [80, 98,  9, 68]]
Y = [[51, 52, 53, 15],
     [ 1, 71, 46, 31],
     [99,  7, 92, 12],
     [15, 43, 36, 51]]
In [5]:
somme(X, Y)
Out[5]:
[[107, 91, 56, 56], [24, 149, 57, 93], [160, 33, 157, 63], [95, 141, 45, 119]]

On vérifie en utilisant sympy que le calcul est correct:

In [6]:
from sympy import Matrix
Mx = Matrix(X)
My = Matrix(Y)
Mx + My
Out[6]:
Matrix([
[107,  91,  56,  56],
[ 24, 149,  57,  93],
[160,  33, 157,  63],
[ 95, 141,  45, 119]])

Question 2

In [7]:
def produit(A, B):
    C = []
    for i in range(4):
        row = []
        for j in range(4):
            row.append(sum(A[i][k]*B[k][j] for k in range(4)))
        C.append(row)
    return C
In [8]:
produit(X,Y)
Out[8]:
[[3807, 7465, 6514, 4176],
 [3270, 9477, 8051, 6057],
 [10337, 7666, 12245, 5102],
 [6089, 14105, 12024, 7814]]

On vérifie en utilisant sympy que ce calcul est correct:

In [9]:
Mx * My
Out[9]:
Matrix([
[ 3807,  7465,  6514, 4176],
[ 3270,  9477,  8051, 6057],
[10337,  7666, 12245, 5102],
[ 6089, 14105, 12024, 7814]])

Question 3

In [10]:
from math import sqrt
def est_premier(n):
    if n == 0 or n == 1:
        return False
    for i in range(2, int(sqrt(n))+1):
        if n % i == 0:
            return False
    return True

On vérifie que la fonction est_premier fonctionne bien:

In [11]:
for i in range(100):
    if est_premier(i):
        print(i, end=', ')
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 

D'abord, on remarque qu'il n'existe pas de quadruplet de nombre premiers $p$, $p+2$, $p+4$, $p+6$, car l'un d'eux doit être divisible par trois (en effet, leurs valeurs modulo 3 sont $p$, $p+2$, $p+1$). Comme 3 est le seul nombre premier divisible par trois, il faudrait que le quadruplet contienne le nombre 3. Or un tel quadruplet n'existe pas.

In [12]:
def triplets_nombre_premier(n):
    L = []
    p = 3
    while len(L) < n:
        if est_premier(p) and est_premier(p+6):
            if est_premier(p+2):
                L.append((p, p+2, p+6))
            elif est_premier(p+4):
                L.append((p, p+4, p+6))
        p += 2
    return L
In [13]:
triplets_nombre_premier(10)
Out[13]:
[(5, 7, 11),
 (7, 11, 13),
 (11, 13, 17),
 (13, 17, 19),
 (17, 19, 23),
 (37, 41, 43),
 (41, 43, 47),
 (67, 71, 73),
 (97, 101, 103),
 (101, 103, 107)]

Question 4

In [14]:
def triplets_pythagore(n):
    L = []
    for c in range(1, n+1):
        for b in range(1, c+1):
            for a in range(1, b+1):
                if a**2+b**2 == c**2:
                    L.append((a,b,c))
    return L
In [15]:
triplets_pythagore(30)
Out[15]:
[(3, 4, 5),
 (6, 8, 10),
 (5, 12, 13),
 (9, 12, 15),
 (8, 15, 17),
 (12, 16, 20),
 (15, 20, 25),
 (7, 24, 25),
 (10, 24, 26),
 (20, 21, 29),
 (18, 24, 30)]