Tu as acheté une grande boîte de pièces d'ordinateur en vrac lors d'un vide-grenier.
Tu as commencé à assembler les pièces pour construire des ordinateurs sur mesure.
Tu veux tester les performances de différentes combinaisons de pièces, et tu décides de créer ton propre programme de test de performances pour comparer tes ordinateurs.
Tu choisis le fameux algorithme du « crible d'Ératosthène », un algorithme ancien, mais qui devrait pousser tes ordinateurs à leurs limites.
Ta tâche consiste à créer un programme qui implémente l'algorithme du crible d'Ératosthène pour trouver tous les nombres premiers inférieurs ou égaux à un nombre donné.
Un nombre premier est un nombre supérieur à 1 qui n'est divisible que par 1 et par lui-même. Par exemple, 2, 3, 5, 7, 11 et 13 sont des nombres premiers. En revanche, 6 n'est pas un nombre premier, car il est non seulement divisible par 1 et par lui-même, mais aussi par 2 et par 3.
Pour utiliser le crible d'Ératosthène, tu commences par créer un tableau contenant tous les nombres entre 2 et le nombre donné. Ensuite, tu répètes les étapes suivantes :
Tu répètes ces étapes jusqu'à avoir parcouru tous les nombres de ton tableau. À la fin, tous les nombres non marqués sont premiers.
Les tests ne vérifient pas que tu as implémenté l'algorithme, seulement que tu as produit la bonne liste de nombres premiers. Pour vérifier que tu implémentes correctement le crible, un bon premier test consiste à vérifier que tu n'utilises ni division ni opération de reste.
Supposons que tu cherches les nombres premiers inférieurs ou égaux à 10.
Tu as examiné tous les nombres et constaté que 2, 3, 5 et 7 ne sont toujours pas marqués, ce qui signifie qu'ils sont les nombres premiers inférieurs ou égaux à 10.
Inscris-toi sur Exercism pour apprendre et maîtriser Delphi Pascal avec 76 exercices, et un vrai mentorat humain, le tout gratuitement.
On explore différentes approches du crible d'Ératosthène, en commençant par les boucles imbriquées et l'évaluation paresseuse, avant de passer aux ensembles et, enfin, à la récursivité.