Haskell : Fonction Nombre Premier

Exercices Corriges en Haskell : Fonction  Nombre Premier

Exercice corriges Programmation Fonctionnelle (Haskell)

Écrire une fonction en Haskell permettant de déterminer si un entiers positifs pris en paramètre est premier ou non.

Haskell pandacodeur

Correction :

Version recursive

isPrime :: Int -> Bool
isPrime n = isPrimeHelper n (n-1)

isPrimeHelper :: Int -> Int -> Bool
isPrimeHelper n 1 = True
isPrimeHelper n m =
    if n `mod` m == 0
        then False
    else isPrimeHelper n (m-1)

Explications :

Un nombre premier est un nombre qui ne peut être divisé que par 1 et par lui-même. Par exemple, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31 sont des nombres premiers.

Dans le premier code, on utilise une méthode récursive pour vérifier si le nombre est premier. La fonction isPrime prend en entrée un entier n, et appelle une autre fonction isPrimeHelper avec deux arguments : n et n-1. La fonction isPrimeHelper est récursive : elle teste si n est divisible par m (où m varie de n-1 à 1), et si c'est le cas, renvoie False. Si n n'est divisible par aucun de ces nombres, alors n est un nombre premier, et la fonction renvoie True.

Autre Solution :

Voici une autre façon d'implémenter cette fonction en Haskell

isPrime :: Int -> Bool
isPrime n =
    let
        limit = floor $ sqrt $ fromIntegral n
    in
        all (\x -> n `mod` x /= 0) [2..limit]

Explications :

Un nombre premier est un nombre qui ne peut être divisé que par 1 et par lui-même. Par exemple, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31 sont des nombres premiers. Dans la deuxième version, on utilise une méthode itérative pour vérifier si le nombre est premier. On calcule la racine carrée de n, et on teste si n est divisible par tous les nombres de 2 à la racine carrée de n. Si n est divisible par l'un de ces nombres, alors il n'est pas premier, sinon il est premier.

Autre Solution :

Voici une autre façon d'implémenter la fonction en Haskell en utilisant une fonction filter :

isPrime :: Int -> Bool
isPrime n =
    let
        factors = filter (\x -> n `mod` x == 0) [2..(n-1)]
    in
        null factors

Explications :

Un nombre premier est un nombre qui ne peut être divisé que par 1 et par lui-même. Par exemple, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31 sont des nombres premiers.Dans la troisième version, on utilise la fonction filter pour calculer la liste des diviseurs de n (à l'aide d'une fonction anonyme qui teste si n est divisible par un nombre), et on vérifie si cette liste est vide. Si elle est vide, alors n est un nombre premier, sinon il n'est pas premier.

La fonction filter est une fonction très utile en Haskell qui permet de filtrer les éléments d'une liste selon un prédicat donné en argument. Elle prend deux arguments : une fonction booléenne appelée prédicat et une liste d'éléments. La fonction retourne une nouvelle liste contenant les éléments de la liste d'entrée pour lesquels le prédicat est vrai.La fonction filter est une fonction très utile en Haskell qui permet de filtrer les éléments d'une liste selon un prédicat donné en argument. Elle prend deux arguments : une fonction booléenne appelée prédicat et une liste d'éléments. La fonction retourne une nouvelle liste contenant les éléments de la liste d'entrée pour lesquels le prédicat est vrai.

Voici la signature de la fonction filter en Haskell :

filter :: (a -> Bool) -> [a] -> [a]

Le premier argument est une fonction qui prend un élément de type a et retourne un booléen (True ou False). Le deuxième argument est une liste d'éléments de type a. La fonction filter renvoie une nouvelle liste d'éléments de type a qui satisfont le prédicat.

Voici quelques exemples d'utilisation de la fonction filter :

-- Retourne une liste contenant tous les éléments pairs de la liste originale
filter (\x -> x `mod` 2 == 0) [1,2,3,4,5,6,7,8,9,10]  -- [2,4,6,8,10]

-- Retourne une liste contenant tous les éléments de longueur supérieure à 3
filter (\s -> length s > 3) ["a", "ab", "abc", "abcd", "abcde"]  -- ["abcd", "abcde"]

La fonction filter est très pratique pour éliminer des éléments indésirables d'une liste ou pour ne garder que certains éléments selon certains critères. Il est également possible d'utiliser des fonctions prédéfinies en Haskell avec filter. Par exemple, pour obtenir tous les nombres premiers d'une liste d'entiers, on peut écrire :

primes :: [Int] -> [Int]
primes xs = filter isPrime xs

où isPrime est une fonction qui vérifie si un nombre est premier ou non.

En résumé, la fonction filter est un outil très pratique en Haskell qui permet de filtrer les éléments d'une liste selon un prédicat donné en argument. Elle est utilisée pour éliminer des éléments indésirables ou pour ne garder que certains éléments d'une liste selon certains critères.

Si vous avez trouvé les exercices corrigés en Haskell de JoëlYk intéressants et utiles, pourquoi ne pas les partager avec d'autres personnes qui pourraient également en bénéficier ? Partagez ce lien sur les réseaux sociaux ou envoyez-le à vos amis et collègues. Vous pourriez aider quelqu'un à améliorer ses compétences en programmation ou à trouver des solutions à des problèmes complexes. N'oubliez pas que la connaissance doit être partagée pour grandir. Merci pour votre soutien et votre partage !

Contact WhatsApp : +237 658395978 | Réaliser Par Joël_Yk

  • Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire

Anti-spam