Matrice des pgcd(i,j) [Python]

Les questions [P] utilisent Python. Pour {n\ge1}, on note {\varphi(n)} le nombre d’entiers de {\{1,\ldots,n\}} premiers avec {n}. On définit {G_n=(i\wedge j)_{1\le i,j\le n}}, {F_n=\operatorname{diag}(\varphi(1),\ldots,\varphi(n))} et {A_n=(a_{i,j})}, où {a_{i,j}=1} si {i\mid j} et {0} sinon. La transposée de {M} est notée {M^t}.

Soit {D_n} l’ensemble des diviseurs positifs de {n}.

1. (a) Pour {f:\{1,\ldots,n\}\to D_n}, {f(k)=n\wedge k}, montrer que {d\in D_n} possède exactement {\varphi(n/d)} antécédents.

1. (b) En déduire {\sum\limits_{d\mid n}\varphi(d)=n}.

2. (a) [P] Écrire phi(n) à partir de la définition, en utilisant gcd.

2. (b) [P] Écrire G(n) et F(n).

2. (c) [P] Écrire test(i,j) renvoyant {1} si {i} divise {j}, et {0} sinon. En déduire A(n).

2. (d) [P] Vérifier {G_n=A_n^tF_nA_n} pour quelques valeurs de {n}.

3. (a) Démontrer cette égalité pour tout {n\ge1}.

3. (b) En déduire {\det G_n}.

3. (c) [P] Vérifier le résultat pour quelques valeurs de {n}.

4. (a) Déterminer une matrice triangulaire supérieure {B_n}, de diagonale strictement positive, telle que {G_n=B_n^tB_n}. Prouver son unicité.

4. (b) [P] Définir B(n) et vérifier {G_n=B_n^tB_n}.

Indications Python

from math import gcd importe le pgcd. np.array crée une matrice, np.diag une diagonale, A.T la transposée et A.dot(B) le produit matriciel.