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:
ensuite j'ai fait ma deuxième fonction:
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
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
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
-
Contributeurbonjour,
ne suffit-il pas d'ajouter une variable, par exempleninitial
?-
-
Contributeur@sk_qu'as-tu essayé? qu'as-tu obtenu?
-
@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 pourplus_grand_diviseur_premier(10)
j'ai obtenu 10 alors que 10 n'est pas premier -
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().
-