Exercices C/C++ pour débutants

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++

C
Exécuter →
main.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 ");
}
Résultat de l’exécution
29 is prime
C++
Exécuter →
main.cpp
#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";
}
Résultat de l’exécution
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

C utilise de petites fonctions procédurales et montre ouvertement comment les données sont représentées en mémoire.

C++

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.

Tous les défis