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 09-10-2019 21:54:30

Oerlemans Eloïse
Invité

Dm de maths python

Bonjour je suis bloquer sur mon DM python. Pourriez vous m'aider s'il vous plaît.

On nous dit:

Écrire le programme d'une fonction 《nbpremier》 d'argument n, un entier naturel non nul, qui retourne le nombre de nombres premiers inférieurs ou égaux à n. On pourra utiliser la fonction 《nbdv》 décrite ci-dessous.

def nbvd (a) :
      n=0
      for i in range(1,a+1) :
            if a%i==0 :
                    n=n+1
      return(n)

Pouvez vous m'aider et m'explique s'il vous plaît.  Merci.

#2 10-10-2019 09:55:10

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

Re : Dm de maths python

Bonjour,

Alors déjà, je ne sais pas qui a écrit cette fonction, mais pour moi elle est maladroite...
D'abord que fait-elle ?
Son nom aurait dû être "transparent" si on avait écrit : nbdv et non nbvd mais là je présume que c'est toi qui a recopié trop vite (confirmé : je vois que tu as écrit <<nbdv>> plus loin)....
Qu'est-ce qui me fait dire ça ? nb est une abréviation courante pour nombre et dv est constitué des deux premières consonnes, dans l'ordre de lecture, du mot diviseurs...
def nbdv(a) est donc une fonction qui retourne le nombre de diviseurs d'un nombre a... n est ce nombre.
if a%i==0:
    n=n+1
signifie :
si le reste de la division de a par le nombre i est égal à 0 alors
   ajoute 1 au nombre n
et lorsque le reste de la division de a par i est nul c'est ce que a se divise par i avec un quotient entier exact, donc que (nous y voilà) i est un diviseur de a... et n est le nombre de diviseurs de a !

Si a=27 (par exemple)
Le déroulement de la fonction nbdv sera le suivant :
elle va tester tous les restes de la division de 27 par les nombres de 1 à 27 (inclus)
division  par 1 : reste 0,  alors   n-->1
division  par 2 : reste 1
division par 3 : reste 0,  alors   n--> 2
divisions par 4, 5,  6, 7 ou 8 : reste 1
division par 9 : reste 0,  alors   n--> 3
divisions par 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26  : reste 1
division par 27 : reste 0, alors  --> n =4

C'est fini, cette fonction retourne n (qui dans cet exemple vaut 4).
Alors je reviens à "Pourquoi maladroit" ?
Parce que n'importe quel nombre premier ou non :
- se divise toujours par 1
- se divise toujours par lui-même.
Donc le nombre minimum de diviseurs n'est pas n=0 mais n=2 et il est donc inutile de chercher le reste dans la division par 2  et dans la division par a...
Donc je récris la fonction :
def nbdv(a):
    n=2
    for i in range(2, a):
          if a%i==0:
                n=n+1
    return (n)
Je fais deux divisions complètement inutiles de moins.

Maintenant, tu dois écrire une 2e fonction qui prendra en argument le nombre n à tester ert qui interrogera la fonction nbdv(a) pour savoir quel est le nombre de diviseurs du nombre n.
Tu interroges nbdv(a) au sujet du nombre n, qu'elle, elle va appeler a...
Jusque-là pas de souci
La réponse de def nbdv(a): sera un nombre n, mais ce nombre n dans la fonction appelante def nbpremier(n):
désigne le nombre à tester.
Pour éviter que Python se prenne les pieds dans la tapis, il faudra récupérer ce nombre de diviseurs sous un autre nom, par exemple nbd...
Comme ceci : nbd=nbdv(n)
Au retour dans la fonction  nbpremier(n) la variable nbd contiendra le nombre de diviseurs.
Si nbd ne te plaît pas, tu peux l'appeler autrement (par exemple nb_diviseurs) ça n'a pas d'importance, pourvu que le nom de contienne pas d'espace(s)...

Maintenant, autre question : il va me servir à quoi ce nombre de diviseurs ?
Il ne faut pas rester là à croire que Python fait de la magie ou que tu ne peux savoir...
Tu fais, là, des Maths en Python !
Quelle est donc la définition mathématique d'un nombre premier ?

A partir de là,
réfléchis, reviens et propose une solution (...et/ou des questions).
je t'aiderai...

@+

[EDIT] Faute de frappe. Merci D_John, c'est corrigé !
Bien sûr que non, c'était pas n=n+2, mais n=n+1, on augmente le nb de diviseurs de 1 à la fois en cas de reste 0

Dernière modification par yoshi (10-10-2019 13:40:26)


Arx Tarpeia Capitoli proxima...

Hors ligne

#3 10-10-2019 13:35:00

D_john
Invité

Re : Dm de maths python

Salut yoshi,

Es-tu certain de l'instruction n = n+2 ?

A+ (si j'ai davantage de temps libre !)

Pied de page des forums