Partage
  • Partager sur Facebook
  • Partager sur Twitter

Déterminer si un nombre est premier

Sujet résolu
    12 février 2016 à 19:08:16

    J'ai des difficultés avec les boucles de cette fonction : à quel moment arrêter la boucle? Par ailleurs, je crois qu'on peut arrêter les divisions à la racine carrée de n sans avoir besoin d'aller jusqu'à n, mais je ne sais pas comment installer ceci. Un petit coup de main, svp, pour y voir plus clair? Merci par avance.

    def is_prime(n):
        if n==1:
            print ('F')
        if n==2:
            print ('T')   
        for i in range(2,n):
            if n%i==0:
                print ('F')
                break
            else:       
                print ('T')
                break
    • Partager sur Facebook
    • Partager sur Twitter
      12 février 2016 à 19:41:55

      Salut !

      Tout d'abord pour la racine carrée, tu devras ajouter ceci dans ton préambule :

      from math import sqrt

      Tu sera alors en mesure de l'utiliser :)

      Ensuite, tu n'as qu'a rajouter une condition, un peu du genre :

      if i > sqrt(n):

      Dans lequel tu mettras un break et print('T').

      Quelques petites remarques cependant :

      • Tu testes deux fois la divisibilité par 2 (range(a,b) inclut a mais pas b)
      • Utiliser des break dans un for peut être vu comme une mauvaise pratique de programmation, et beaucoup te diront d'utiliser le while
      • Enfin, si tu utilises la racine carrée, veille à la stocker dans une variable plutôt que de la recalculer, tu n'as pas l'impression, mais en réalité ça met trèèèèèèèèèèèès longtemps :p

      -
      Edité par BunshinKage 12 février 2016 à 19:42:17

      • Partager sur Facebook
      • Partager sur Twitter
        12 février 2016 à 20:43:47

        Merci, BunshinKage, pour ton message. Je n'ai pas encore étudié le module "math", alors je vais rester sur le plus simple et utiliser range(2, n).

        En fait mon programme très simple pourrait fonctionner si je pouvais enclencher la boucle "for" à la ligne 6. En effet, il vérifie la divisibilité par 2, mais ne continue pas en vérifiant la divisibilité par 3, par 4, par 5, etc, jusqu'à atteindre le nombre n.

        Par exemple, pour le nombre 14, il imprime F (résultat exact puisque 14 n'est pas un nombre premier) parce qu'il a vérifié la divisibilité par 2 et a terminé aussitôt.

        Mais pour le nombre 9, il imprime T (résultat inexact puisque 9 n'est pas un nombre premier) parce qu'il a vérifié la divisibilité par 2; le résultat n'étant pas 0, il est passé à la ligne 10 ("else") qui lui a dit d'imprimer T.

        Ma question est d'arriver à le faire retourner sur "for" afin d'utiliser tous les nombres i contenus dans range(3,n). [Je viens de m'apercevoir que diviser par 2 a été déjà fait à la ligne 4. Je vais corriger cela.]

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          12 février 2016 à 21:20:00

          • Une fonction is_prime est sensée retourner True ou False, pas afficher quoique ce soit.
          • Que tu n'aies pas vu le module math en cours n'est pas une raison valale de ne pas l'utiliser, mais bon au pire tu peux utiliser int(n ** 0.5).
          • Si tu "break" aussi quand i ne divise pas n, l'itération avec forne sert à rien.
          • Si tu testes la parité de n avant d'entrer dans l'itération, ce que tu fais déjà, alors tu peux itérer directement sur les nombre impaire avec range(3, sqrt(n), 2).
          • Partager sur Facebook
          • Partager sur Twitter
            13 février 2016 à 17:56:13

            Merci à tous deux. J'ai beaucoup œuvré sur ce programme qui est pourtant tout simple. Finalement, j'ai pu y mettre un point final! La réponse définitive se trouve dans mon autre post intitulé : if not n & 1:

            Bonne journée à tous.

            • Partager sur Facebook
            • Partager sur Twitter

            Déterminer si un nombre est premier

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown