Autour des nombres premiers


Remarque : nous aurons besoin des modules numpy et time de python.

Nous verrons plus en détails le module Numpy plus tard, pour l'instant nous l'utiliserons pour la racine carrée :

1. Tests de primalité

Nous allons chercher à écrire différents tests de primalité, c'est à dire des algorithmes permettant de savoir si un nombre $n \ge 2$ est un nombre premier.

Test de divisibilité
Le test le plus simple est le suivant : on parcourt successivement les valeurs entre 2 et ${n-1}$ tant qu'on n'a pas trouvé de diviseur de $n$.
Si aucun entier $d$ ne divise $n$, alors $n$ est premier. Sinon, $n$ est un nombre composé.

1.1 Exercice : mise en oeuvre de l'algorithme

(on pourra retourner un booléeen : True si $n$ est premier, False sinon)

Exemples :

1.2 Exercice : amélioration de la fonction précédente

1.3 Exercice : affichage des nombres premiers

2. Un test probabiliste

On dit que $n$ est probablement premier s'il vérifie le test de Fermat, à savoir si $2^{n-1}=1 \text{ modulo n} $

2.1 Exercice : test de Fermat

Exemples :

2.2 Exercice : affichage des nombres pseudopremiers

On pourrait démontrer que :

$$\text{si }n\text{ est premier et impair, alors : }2^{n-1}=1 \text{ modulo n} $$

Malheureusement, la réciproque du théorème est fausse : il existe des nombres non premiers qui vérifient le test.
Ces nombres sont appelés nombres pseudopremiers.

Exemple :

3. Bonus

3.1 Exercice : nombres de Mersenne

Les nombres de Mersenne sont ceux s'écrivant $2^{n}-1$, avec n premier. Attention, tous ne sont pas des nombres premiers.
Par exemple :
$2^{19}-1$ est premier, mais $2^{23}-1$ ne l'est pas.

Exemple :

3.2 Exercices : decomposition en produits de nombres premiers

Exemple :

Exemple :