Imprimer
Catégorie : Programmation Python - 2nde SNT
Affichages : 10697

Présentation du principe

Trouver tous les diviseurs d'un nombre entier quelconque, ou décomposer un nombre entier en un produit de facteurs premiers comme le montre cette vidéo. Sinon, j'ai trouvé aussi cela pour vous aider à trouver les diviseurs.

Rappel: Nombres premiers = 1, 2, 3, 5, 7, 11, ...

 


Scripts à tester

Sur cette page quelques scripts vous sont présentés. Ne passez pas trop vite car ils (les scripts) sont une partie de la solution de l'exercice. Donc suivez ce conseil:

Thème: Division euclidienne, reste, quotient

https://fr.wikibooks.org/wiki/Programmation_Python/Op%C3%A9rateurs

Script

nbre=19
print (nbre/2)
print (nbre%2)
print (nbre//2)

Shell>>>

>>> %Run test.py
9.5
1
9

Thème: Boucle Tant que 

https://fr.wikibooks.org/wiki/Programmation_Python/Instructions_r%C3%A9p%C3%A9titives

Script

i=0
nbre=10
while i<=nbre:
    print(i)
    i=i+1

Shell>>>

>>> %Run test.py
0
1
2
3
4
5
6
7
8
9
10

Thème: Gestion d'une liste

https://fr.wikibooks.org/wiki/Programmation_Python/Listes

Script

liste1=[]
print(liste1)
i=0
while i<10:
    liste1.append(i*2)
    i+=1
print(liste1)
liste2=[1,2*5,'dernier terme']
j=0
while j<=2:
    print("le ",j," terme de la liste2 est ",liste2[j])
    j=j+1

Shell>>>

>>> %Run test.py
[]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
le  0  terme de la liste2 est  1
le  1  terme de la liste2 est  10
le  2  terme de la liste2 est  dernier terme

Thème: Exécution conditionnelle

https://fr.wikibooks.org/wiki/Programmation_Python/Structures_de_contr%C3%B4le

Script

# test diviseur
nbre=9
dividende=nbre
diviseur=2
division=nbre/2
reste=nbre%2
quotient=nbre//2
print ("division =",nbre/2)
print ("reste =",nbre%2)
print ("quotient =",nbre//2)
print ("La division de ",nbre," par ",diviseur," donne ", nbre,"= ",quotient,"x",diviseur," + ",reste)
if reste==0:
    print("Comme le reste est nul, alors on dit que ",diviseur," est un diviseur de ",nbre)
else:
    print("Comme le reste n'est pas nul, alors on dit que ",diviseur," n'est pas un diviseur de ",nbre)
    print("On remarque aussi que le résultat de la division est un nombre décimal :",division)

Shell>>

Tester aussi avec nbre = 8

>>> %Run test.py
division = 4.5
reste = 1
quotient = 4
La division de  9  par  2  donne  9 =  4 x 2  +  1
Comme le reste n'est pas nul, alors on dit que  2  n'est pas un diviseur de  9
On remarque aussi que le résultat de la division est un nombre décimal : 4.5

Conclusion

En utilisant une liste, une boucle et une condition, écrivez un script imprimant les diviseurs de n'importe quel nombre. 

Pour vous aidez:

# ceci est un commentaire
# première etape, saisir un nombre, ici je teste pour 60
nbre=60
print("je cherche les diviseurs de ",nbre)
# création d'une liste qui contiendra tous les diviseurs de ce nombre
# je mets 1 dans cette liste
# mon compteur sera i et i commencera par 2
diviseur=[1]
i=2
# L'idée va être de diviser le nbre par i et de voir si cette division n'a pas de reste
# cette idée est à imbriquer dans une boucle
# ----si le reste est nul, alors ajouter la valeur de i dans la liste des diviseurs
# ----si le reste n'est pas nul alors incrémenter i de 1
while i<=nbre:
    if nbre%i==0:
       
        diviseur.append(i)
        print(i,"est un diviseur de",nbre)#impression pour comprendre le fonctionnement de la boucle
        i=i+1
    else:
        i=i+1
        print(i)#impression pour comprendre le fonctionnement de la boulce

print("Les diviseurs sont ",diviseur)  

Shell>>>

>>> %Run txt.py
je cherche les diviseurs de  60
2 est un diviseur de 60
3 est un diviseur de 60
4 est un diviseur de 60
5 est un diviseur de 60
6 est un diviseur de 60
8
9
10
10 est un diviseur de 60
12
12 est un diviseur de 60
...
...
...
59
60
60 est un diviseur de 60
Les diviseurs sont  [1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60]

La solution

Enfin, une des solutions possibles. Attention cependant à ne pas tricher, vous devez réfléchir avant de basculer sur cette page. Il n'est pas trop tard pour faire demi-tour... car  "L’apprentissage optimal est l’acquisition équilibrée de concepts, d’habiletés et d’une compétence métacognitive"

Script avec impressions intermédiaires pour comprendre

# ceci est un commentaire
# etape 1 saisir un nombre
nbre=60
print("je cherche les diviseurs de ",nbre)
# création d'une liste qui contiendra tous les diviseurs de ce nombre
# je mets 1 dans cette liste
# mon compteur sera i et i commencera par 2
diviseur=[1]
i=2
# L'idée va être de diviser le nbre par i et de voir si cette division n'a pas de reste
# cette idée est à imbriquer dans une boucle
# ----si le reste est nul, alors ajouter la valeur de i dans la liste des diviseurs
# --------et faire la division du nbre par i et mettre ce résultat dans la variable nbre
# --------puis reprendre la boucle avec cette nouvelle variable
# ----si le reste n'est pas nul alors incrémenter i de 1
while i<=nbre:
    if nbre%i==0:
        print (i,'est un diviseur de ',nbre)#impression pour comprendre le fonctionnement de la boulce
        diviseur.append(i)
        nbre=nbre/i
        print(nbre)#impression pour comprendre le fonctionnement de la boulce
    else:
        i=i+1
        print(i)#impression pour comprendre le fonctionnement de la boulce

print("Les diviseurs sont ",diviseur) 

Script fonctionnel

# Saisie nbre
# etape 1 saisir un nombre
nbre=int(input("Veuillez saisir un nombre entier quelconque\nVous pouvez saisir un très grand nombre entier\nNbre="))
nbreini=nbre
# initialisation des variables
diviseur=[1]
i=2
# Test
while i<=nbre:
    if nbre%i==0:
        diviseur.append(i)
        nbre=nbre/i
    else:
        i=i+1
# Impression du résultat        
print("Les diviseurs de ",nbreini," sont ",diviseur)  

Shell>>>

>>> %Run 'diviseur d un nombre.py'
Veuillez saisir un nombre entier quelconque
Vous pouvez saisir un très grand nombre entier
Nbre=12548120
Les diviseurs de  12548120  sont  [1, 2, 2, 2, 5, 13, 59, 409]