Exercice — dans l'esprit des sujets d'informatique
- Écrire l'algorithme itératif d'un test de primalité
Premier(r)pour un entier naturel : on incrémente un diviseur tant que et . - Pourquoi la borne (racine) suffit-elle ? Relier au facteur complémentaire .
- Un programme retient un entier lorsque
Premier(t[i])etPremier((t[i]-1) div 2)sont tous deux vrais. En une phrase, quelle propriété de cette double condition teste-t-elle ? Donner un exemple.
Voir la correction commentéeAprès avoir posé votre démarche
1. Test de primalité itératif.DEF FN Premier (r : entier) : booléen
Variables d : entier
Début
d ← 1
Répéter
d ← d + 1
Jusqu'à (r mod d = 0) ou (d > racinecarré(r))
Retourner (d > racinecarré(r))
Fin
Aucun diviseur trouvé avant la racine ⇒ l'entier est premier.
2. Si un facteur divisait , le cofacteur serait un diviseur déjà rencontré. D'où la borne.
3. (t[i]-1) div 2 : on exige que soit lui aussi premier. est alors un nombre premier dit « sûr » : avec premier. Exemples : 7 (car 3 est premier), 11 (car 5), 23 (car 11) ; mais pas 13, car n'est pas premier.