Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 10-11-2019 18:54:49

Sousou13
Membre
Inscription : 10-11-2019
Messages : 2

Programmation

Écrire un programme en Python qui détermine si deux nombres sont premiers entre eux

Hors ligne

#2 10-11-2019 19:18:29

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 7 457

Re : Programmation

Bonjour, merci de bien vouloir m'aider, voilà, j'ai commencé ce petit code , qu'en pensez vous ?

Trêve de plaisanterie : tu veux le code tout de suite, maintenant ou immédiatement ? Prends ton temps pour répondre, je ne suis pas pressé :-)

PS : T'as de la chance, il y a un pro de Python ici, mais je pense qu'il va commencer par te frictionner les oreilles ;-)

De mon côté, je vais voir comment m'y prendre.


De la considération des obstacles vient l’échec, des moyens, la réussite.

Hors ligne

#3 10-11-2019 19:59:33

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Programmation

Bonsoir,

(ce n'est pas en option)

@freddy. Peut-être cette personne a-telle eu une panne d'écran momentanée qui l'a empêchée de lire la demande ?
Pas de bol, avant de taper son message, elle aurait eu ceci sous les yeux :
181023093911210953.png

@sousou13
Alors, il serait utile de savoir dans quel cadre tu poses la question...
Parce que la réponse diffère selon le cadre...
Je penche pour un devoir de réflexion donné par ton prof, tellement c'est basique...
Mais avant, il est nécessaire que je te dise : tu ne sais pas tes leçons !!!
Sinon tu saurais que :
on dit que 2 nombres a et b sont premiers entre eux si et seulement si leur PGCD est égal à 1.

Donc, si c'est un devoir, alors tu dois écrire un programme de 4 lignes minimum
1 ligne pour déclarer les valeurs de a et b
1 ligne pour la boucle while avec test d'arrêt
1 ligne pour l'application du calcul du PGCD
1 ligne pour que Python te réponde True ou False

Personnellement, je trouve ça mal fini.
J'ajouterais, immédiatement après la 1ere ligne, une deuxième ligne où on stockerait les valeurs de départ de a et b, dans deux variables a0 et b0.
Et à la fin au lieu d'avoir brutalement comme réponse True ou False, je ferais afficher :
Les nombre a0 et n0 sont-ils premiers entre eux  ? Réponse : True ou False
Si tu connais la structure if... else... alors tu prévois quand la boucle est terminée 4 lignes au lieu d'une pour avoir l'affichage :
Les deux nombres a0 et bo sont premiers entre eux
ou
Les deux nombres a0 et b0 ne sont pas premiers entre eux...

Si c'est pour ta curiosité personnelle, alors sache que Python sait calculer tout seul le PGCD...
Ce qui ne dispense pas, selon moi, d'afficher une "réponse propre"...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#4 11-11-2019 09:53:34

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Programmation

Re,

@freddy
Qu'as-tu trouvé ?
Tu as besoin de connaître qu'en Python le modulo est %...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#5 11-11-2019 11:03:21

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 7 457

Re : Programmation

yoshi a écrit :

Re,

@freddy
Qu'as-tu trouvé ?
Tu as besoin de connaître qu'en Python le modulo est %...

@+

Salut,

merci pour le modulo, on a mod(a,b) dans d'autres langages, c'est un peu déroutant pour moi. En R, je crois que c'est %% :-)
Mon idée, un peu brutale, est de dérouler une boucle qui ira de $p = 2$ à $min(n, m)$ avec $n,m$ nombres entiers dont je cherche la primalité commune.
Et de tester : si $p$ divise n et m, alors non premiers entre eux ; sinon, ils sont premiers.
Question : le "et" s'écrit comment en Python, ET ou AND ou & ou ...?
Il faut que je consulte une liste de mots un peu standards pour mieux imaginer les solutions. J'ai déjà chargé un PDF, suffit de trouver un peu de temps pour le feuilleter.

Dernière modification par freddy (11-11-2019 11:04:08)


De la considération des obstacles vient l’échec, des moyens, la réussite.

Hors ligne

#6 11-11-2019 11:37:44

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Programmation

Salut,

Mon idée, un peu brutale,

Oui, ça l'est... mais c'est une idée qui marche.
Toutefois, il y a plus simple en t'appuyant sur la définition PGCD(a,b)=1 $\iff $ a et b premiers entre eux...
... et sur la recherche du PGCD par divisions successives (l'instruction de calcul en elle-même tient une ligne de... 9 caractères), plus la définition de la boucle qui précède, cela fait deux lignes (c'est la chasse au gaspi, comme on disait)
Et : and
Ou : or
if .........:
    instructions
elif .......:  # (sinon si)  Cette ligne et la suivante peuvent ne pas exister...
    instructions
else:         # (sinon) .... quand le choix se résume à deux possibilités
    instructions
suite à donner

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#7 11-11-2019 12:00:22

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 7 457

Re : Programmation

Oui, oui, j'avais compris que la fonction PGCD existait, je cherchais très "simplement" à  réinventer la roue  :-)


De la considération des obstacles vient l’échec, des moyens, la réussite.

Hors ligne

#8 11-11-2019 12:11:54

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Programmation

Re,

Oui, oui, j'avais compris que la fonction PGCD existait, je cherchais très "simplement" à  réinventer la roue  :-)

Oh, mais je n'utilise pas non plus la fonction PGCD native, sinon la boucle est inutile : là, puisque je pense que c'est un exo donné, je réinvente aussi la roue (sinon ce ne serait pas formateur pour notre ami) : je le recalcule en 2 lignes au moyen d'une boucle...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#9 11-11-2019 22:28:37

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 7 457

Re : Programmation

Re,

oui, ok, une suite de division euclidienne où le diviseur et le reste deviennent dividende et diviseur, jusqu'à que le reste soit nul.
Tu passes par $divmod$ ?
Mais comment tu conserves le dernier reste non nul ? Car $divmod(a,b) = (q,r)$ et comment tu récupères $r$ ?

PS : ça va, j'ai trouvé, ça se récupère directement. Bon, je commence à comprendre le langage.

Dernière modification par freddy (11-11-2019 22:57:37)


De la considération des obstacles vient l’échec, des moyens, la réussite.

Hors ligne

#10 12-11-2019 09:57:42

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Programmation

Salut,

Bin oui, le quotient en fait est inutile...
En Basic, en Pascal aussi, il me semble, existe l'instruction SWAP(a,b) qui permet d'échanger les valeurs de a et b...
En Python, on n'en a pas besoin :


a,b=72,48
print("Avant :",a,b)
a,b=b,a
print("Après :",a,b)
 

qui donne :

Avant : 72 48
Après : 48 72

Avec ça, tu pourras sûrement raccourcir ton code...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#11 12-11-2019 15:53:29

Sousou13
Membre
Inscription : 10-11-2019
Messages : 2

Re : Programmation

@freddy. Peut-être cette personne a-telle eu une panne d'écran momentanée qui l'a empêchée de lire la demande ?
Pas de bol, avant de taper son message, elle aurait eu ceci sous les yeux :
https://nsa39.casimages.com/img/2018/10 … 210953.png

@sousou13
Alors, il serait utile de savoir dans quel cadre tu poses la question...
Parce que la réponse diffère selon le cadre...
Je penche pour un devoir de réflexion donné par ton prof, tellement c'est basique...
Mais avant, il est nécessaire que je te dise : tu ne sais pas tes leçons !!!
Sinon tu saurais que :
on dit que 2 nombres a et b sont premiers entre eux si et seulement si leur PGCD est égal à 1.

Donc, si c'est un devoir, alors tu dois écrire un programme de 4 lignes minimum
1 ligne pour déclarer les valeurs de a et b
1 ligne pour la boucle while avec test d'arrêt
1 ligne pour l'application du calcul du PGCD
1 ligne pour que Python te réponde True ou False

Personnellement, je trouve ça mal fini.
J'ajouterais, immédiatement après la 1ere ligne, une deuxième ligne où on stockerait les valeurs de départ de a et b, dans deux variables a0 et b0.
Et à la fin au lieu d'avoir brutalement comme réponse True ou False, je ferais afficher :
Les nombre a0 et n0 sont-ils premiers entre eux  ? Réponse : True ou False
Si tu connais la structure if... else... alors tu prévois quand la boucle est terminée 4 lignes au lieu d'une pour avoir l'affichage :
Les deux nombres a0 et bo sont premiers entre eux
ou
Les deux nombres a0 et b0 ne sont pas premiers entre eux...

Si c'est pour ta curiosité personnelle, alors sache que Python sait calculer tout seul le PGCD...
Ce qui ne dispense pas, selon moi, d'afficher une "réponse propre"...

@freddy 
Bonjour je suis désolé de répondre que maintenant car je ne savais pas comment ça marcher je découvre à peine ce forum . Je n’ai pas encore vu cela en cours le prof nous a donné cet exercice avant de commencer la leçon donc je ne connais ni le cours sur les nombres premiers ni le language Python c’est pour cela que je vous ai demandé votre aide si ça vous dérange pas de bien vouloir m’aider merci

Hors ligne

#12 12-11-2019 16:56:41

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 7 457

Re : Programmation

Salut,

donc on te demande de faire un travail sur un sujet avec un langage informatique donné sans connaître ni le sujet, ni le langage.
C'est incroyable ce truc, c'est la première fois que je vois ça.
Je vais laisser yoshi intervenir, mais je pense que, lui aussi, va avoir du mal à accréditer ce que tu nous dis.
Bon courage !

Dernière modification par freddy (12-11-2019 16:57:26)


De la considération des obstacles vient l’échec, des moyens, la réussite.

Hors ligne

#13 12-11-2019 18:17:49

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Programmation

Re,

Hmmmm...
Le calcul du PGCD par la méthode des divisions successives, encore appelé "par l'algorithme d'Euclide", s'apprend (s'apprenait ?) en 3e...
La notion de "nombres premiers entre eux" n'a pas grand chose à voir avec les nombres premiers, et se voit (se voyait ?) en 3e...
La notion de fractions irréductible se voit (se voyait ?) en 3e...
Une fraction $\dfrac a b$, où a et b sont des entiers naturels, est dite irréductible si et seulement si PGCD(a,b)=1
Donc, pour obtenir une fraction irréductible égale à une fraction donnée $\dfrac a b$, il faut diviser a et b par leur PGCD.
Voilà, la boucle est bouclée...
Ça fait (faisait ?) partie du programme du 3e... C'était un exercice courant dans la partie arithmétique du Brevet des Collèges...

Les nombres premiers, il y a plus de 30 ans, je les ai enseignés en 5e, puis en 3e, puis pffuiiittt disparus du Collège, reportés au Lycée...
Définition
Un nombre premier est un nombre qui n'a que deux diviseurs, 1 et lui même...
1 n'est pas premier : il a un seul diviseur.
2 est un nombre premier : ses diviseurs sont au nombre de deux, 1 et 2
3 est un nombre premier : ses diviseurs sont au nombre de deux, 1 et 3
4 n'est pas un nombre premier : il a 3 diviseurs, 1, 2 et 4
5 est un nombre premier : ses diviseurs sont au nombre de deux, 1 et 5
6 n'est pas un nombre premier : il a 4 diviseurs, 1, 2, 3 et  6
7 est premier, il n'a que deux diviseurs, 1 et 7.

Comme tu peux le voir "premiers entre eux" et premier (tout court) ça n'a pas grand chose à voir...
Méthode de recherche du PGCD par les divisions successives.
Exemple avec 900 et 576 :
900  |576
324  | 1

576  |324   A partir de maintenant, chaque diviseur prendra la place du dividende
252  | 1      et le reste deviendra le diviseur
....
324  |252
  72 | 1

252  |72
  36  | 3

  72  |36
  00  | 2

Et là le test d'arrêt est atteint : il faut s'arrêter, le PGCD est 36. En effet, la division suivante serai $36 \div 0$, or, il est interdit de diviser par 0...

PGCD = Plus Grand Diviseur Commun, c'est le plus grand nombre entier par lesquels on peut diviser 2 (ou plus) nombres entiers...
$900 = 36 \times 25$
$576 = 36 \times 16$
Et tu peux voir sousou que 36 est bien le PGCD de 900 et 576 parce que 25 et 16 n'ont aucun diviseur commun et donc sont premiers entre eux...

Donc, :
- tu ne sais rien sur le PGCD,
- tu ne sais pas ce que sont deux nombres premiers entre eux,
- tu ne sais pas ce qu'est un nombre premier,
- tu n'as jamais touché au langage Python
- tu as un exercice à faire en Python sur les nombres premiers entre eux, qui fait appel au calcul du PGCD...
C'est bien ça ?
J'ai du mal à accepter ça, sauf en ce qui concerne Python...
Les nouveaux programmes incluent la notion d'algorithme qui, pour être validée, a besoin du support d'un langage de programmation.
Officiellement, maintenant, ledit langage est Python...
Hélas, la formation des profs n'a pas suivi et ne suit toujours pas plus...
Conclusion :
- soit un prof est suffisamment motivé pour apprendre seul,
- soit il fait confiance (en toute inconscience) aux exercices types qu'on lui a généreusement distribués (avec les corrigés...)
  Et il pioche en découvrant Python la veille de donner l'exo à ses élèves.
- s'il est conscient que, non formé, cela relève de la "haute voltige", il le reconnaît devant les parents...
  Quelqu'un ici a un prof qui a dit aux parents de sa classe qu'il découvrait Python en même temps que ses élèves...

J'espère que ton exercice ou DM est pour dans un mois, parce que c'est juste le temps qui serait nécessaire pour
- maîtriser les notions mathématiques citées
- acquérir les rudiments de Python

Pour faire ça en Python, tu as besoin de savoir ce qu'est une boucle, et ça ne se fait pas comme ça d'un claquement de doigts...
Ou alors (clin d'oeil à freddy), il faut faire (mais pas toi, sousou13) :

from fractions import gcd

a,b=900,576
if gcd(a,b)==1:
    print ("Premiers entre eux")
else:
    print ("Premiers entre eux")

Ou alors on peut se contenter de la Réponse True ou false :

from fractions import gcd

print (gcd(900,576)==1)
 

Mais qui sait ça ? Le prof ? J'en doute: non à 90%, sauf s'il le découvre 24 h avant sa classe...
Intérêt pédagogique ? Néant...
Néant, tant pour susciter l'intérêt de Python comme illustration du cours que pour mettre en pratique l'algorithme d'Euclide...
En bref, totalement contre-productif.
Sauf à vouloir des perroquets qui appliquent des recette sans rien y comprendre...
Ce que tu nous as donné est le sujet exact à la virgule près ?
Sinon, je demande à voir...

As-tu déjà
- utilisé un Tableur ?
- utilisé un langage de programmation ? (As-tu même une idée plus ou moins précise de ce que c'est ?)
- as-tu déjà programmé avec ta calculatrice ?

Que disent tes camarades ? Comment vont-ils faire ?

@+

[EDIT]
Je veux bien t'aider, mais j'ai vraiment besoin de savoir :
- Si ton énoncé se résume à la ligne que tu as donnée... Dans le cas contraire, donne l'énoncé exact, s'il te plaît,
- Ce que tu sais et ce que tu ne sais pas,
- De combien de temps tu disposes,
- Si tes camarades sont aussi gênés que toi et comment ils ont l'intention de se débrouiller...

Une chose est claire : on ne donne pas un exercice à faire en Python à quelqu'un qui n'a jamais touché à Python, c'est un non-sens...

Dernière modification par yoshi (13-11-2019 16:42:30)


Arx Tarpeia Capitoli proxima...

Hors ligne

Pied de page des forums