Tester si un nombre est premier en C et C++
Dans cette leçon, vous allez vérifier si un entier est premier en testant les diviseurs jusqu'à sa racine carrée.
Introduction
Un nombre premier est supérieur à 1 et n'est divisible que par 1 et par lui-même. Pour le tester, on divise le nombre par des valeurs plus petites. Mais il suffit d'aller jusqu'à sa racine carrée, ce qui rend le programme bien plus rapide.
Points importants
- Activez les avertissements du compilateur (compiler warnings) et corrigez-les tous.
- Comprenez bien le type et la durée de vie (lifetime) de chaque valeur.
- Vérifiez toujours les données d'entrée et les limites des indices de tableau.
Exemples de code C et C++
#include <stdio.h>
int main(void) {
int number = 29, prime = number > 1;
// A composite number has a factor no larger than its square root.
for (int divisor = 2; divisor * divisor <= number; ++divisor)
if (number % divisor == 0) { prime = 0; break; }
printf("%d is %sprime\n", number, prime ? "" : "not ");
}
29 is prime
#include <iostream>
int main() {
int number = 29;
bool prime = number > 1;
// Stop after the square root and on the first divisor.
for (int divisor = 2; divisor * divisor <= number && prime; ++divisor)
prime = number % divisor != 0;
std::cout << number << " is " << (prime ? "" : "not ") << "prime\n";
}
29 is prime
Comparaison entre C et C++
La boucle ne continue que tant que divisor * divisor <= number, car si le nombre a un diviseur supérieur à sa racine carrée, celui-ci est associé à un diviseur plus petit déjà testé. Dès qu'un diviseur est trouvé, la version C sort de la boucle avec break, tandis que la version C++ s'arrête grâce à la condition && prime. Le résultat montre que 29 est premier.
C utilise de petites fonctions procédurales et montre ouvertement comment les données sont représentées en mémoire.
C++ permet toujours de travailler à bas niveau, mais ajoute des types de bibliothèque et des abstractions plus sûres.
Exercices d'approfondissement
Exécutez les deux versions, puis modifiez le code pour observer la différence de sécurité qu'apporte chaque langage.
- Testez des entrées invalides et des valeurs limites.
- Compilez avec les options -Wall -Wextra -Wpedantic pour activer davantage d'avertissements.
- Placez les déclarations communes dans un fichier d'en-tête et l'implémentation dans un fichier séparé.
S'entraîner avec un défi
Utilisez le contenu de cette leçon pour résoudre un vrai problème. Chaque défi s'exécute dans le navigateur, avec des tests instantanés et une revue par l'IA.
- Vérification de nombre premier Déterminez si un nombre est premier. Facile
- Lister les nombres premiers avec un crible Trouvez les nombres premiers jusqu'à une limite en marquant les multiples composés. Moyen