Plus grand diviseur premier

Fermé
sk_ Messages postés 15 Date d'inscription mardi 2 novembre 2021 Statut Membre Dernière intervention 5 novembre 2021 - 5 nov. 2021 à 13:43
yg_be Messages postés 22756 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 mai 2024 - 5 nov. 2021 à 15:05
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

yg_be Messages postés 22756 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 mai 2024 1 480
5 nov. 2021 à 14:20
bonjour,
ne suffit-il pas d'ajouter une variable, par exemple
ninitial
?
0
sk_ Messages postés 15 Date d'inscription mardi 2 novembre 2021 Statut Membre Dernière intervention 5 novembre 2021
5 nov. 2021 à 14:30
J'ai essayé mais ca ne marche pas
0
yg_be Messages postés 22756 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 mai 2024 1 480 > sk_ Messages postés 15 Date d'inscription mardi 2 novembre 2021 Statut Membre Dernière intervention 5 novembre 2021
5 nov. 2021 à 14:37
qu'as-tu essayé? qu'as-tu obtenu?
0
sk_ Messages postés 15 Date d'inscription mardi 2 novembre 2021 Statut Membre Dernière intervention 5 novembre 2021 > yg_be Messages postés 22756 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 mai 2024
5 nov. 2021 à 14:43
j'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
0
yg_be Messages postés 22756 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 mai 2024 1 480 > sk_ Messages postés 15 Date d'inscription mardi 2 novembre 2021 Statut Membre Dernière intervention 5 novembre 2021
5 nov. 2021 à 15:05
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().
0