Plus grand diviseur premier

Bonjour, je dois écrire une fonction qui renvoie le plus grand diviseur premier du nombre choisi. pour ca, j'ai d'abord fait une fonction pour determiner si le nombre est premier ou pas:

def est_premier(x):
    i= 2
    while i < x and x % i != 0 :
        i = i + 1
    if i == x :
        return True
    else:
        return False


ensuite j'ai fait ma deuxième fonction:

def plus_grand_diviseur_premier(n):
    for i in range(1,n+1):
    while est_premier(n)==False and n%i!=0:
        n=n-1
    return n

apres, le problème, se trouve au niveau du while. quand j'ai mis while n%i !=0, la variable n prend la valeur du nouveau alors qu'il devrait prendre la valeur du n initial.
par exemple, si je mets
def plus_grand_diviseur_premier(10)
,
ca va verifier d'abord si 10 est premier. et puisque ce n'est pas le cas, le programme enlevera 1à 10 jusqu'à que n soit premier(7).
et pour " n%i!=0", n sera = à 7. alors au lieu de vérifier si 10 est divisible par 7 et d'enlever 1 à 7 jusqu'à que ce soit le cas(5), il va voir si 7 est divisible par 7.
Est ce quèil existe une instruction pour reprendre la valeur initiale de n(10) au lieu d'utiliser la nouvelle valeur de n(7).
merci

1 réponse

  1. Contributeur
    bonjour,
    ne suffit-il pas d'ajouter une variable, par exemple
    ninitial
    ?
    1. J'ai essayé mais ca ne marche pas
    2. Contributeur
      @sk_qu'as-tu essayé? qu'as-tu obtenu?
    3. @yg_bej'ai rajouté la variable n_initial
      def plus_grand_diviseur_premier(n):
          n_initial=n
          for i in range(1,n+1):
              while est_premier(n)==False and n_initial%i!=0:
                  n=n-1
              return n 

      et pour
      plus_grand_diviseur_premier(10)  

      j'ai obtenu 10 alors que 10 n'est pas premier
    4. Contributeur
      @sk_si j'étais toi, je jetterais ce code et je réfléchirais à comment réaliser ce travail, avant de commencer à écrire du code.

      si tu veux comprendre ce que fait le code que tu as écrit, ajoute des print().