Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 48 sur 48

Trouver les x,y,z tel que x*y*z = N




  1. #31
    Floklo

    Re : Trouver les x,y,z tel que x*y*z = N

    Bien vu, pourtant quand je relie le code, je ne vois pas pourquoi ça ne prend pas cette solution en compte.

    -----


  2. Publicité
  3. #32
    Floklo

    Re : Trouver les x,y,z tel que x*y*z = N

    si trouvé en fait, la fonction range(1,N) exclut N dans la liste.
    Il faut mette range(1,N+1)

  4. #33
    ansset

    Re : Trouver les x,y,z tel que x*y*z = N

    ça marche, je ne comprenais pas trop non plus en première lecture.
    cordialement.
    y'a quelque chose qui cloche là dedans, j'y retourne immédiatement !

  5. #34
    minushabens

    Re : Trouver les x,y,z tel que x*y*z = N

    une autre approche consiste à faire des boucles descendantes:

    pour i variant de N à 1
    si i divise N
    {
    pour j variant de i à 1
    si j divise N/i renvoyer le triple (i,j,n/(ij)) sinon rien
    } sinon rien
    }
    Dernière modification par minushabens ; 24/08/2017 à 21h14.

  6. #35
    ansset

    Re : Trouver les x,y,z tel que x*y*z = N

    insuffisant écrit comme ça
    pour i variant de N à 1
    car tu as déjà 1 et N comme solution.
    donc il risque fort de t'en manquer à la fin.
    y'a quelque chose qui cloche là dedans, j'y retourne immédiatement !

  7. #36
    minushabens

    Re : Trouver les x,y,z tel que x*y*z = N

    je ne comprends pas ce que tu veux dire. N est trouvé au premier pas et il est nécessairement associé à 1 et 1.

  8. #37
    minushabens

    Re : Trouver les x,y,z tel que x*y*z = N

    ah oui je comprends le problème. J'ai écrit trop vite.

    La première boucle va de N à 1 (en fait elle peut s'arrêter à floor(sqrt(N)) )

    La deuxième boucle va de N/i à 1 (et pas de i à 1 comme j'ai écrit)
    en fait il suffit de descendre de N/i à floor(sqrt(N/i))

    mais de toutes manières, qu'on monte ou qu'on descende deux boucles sont suffisantes.
    Dernière modification par minushabens ; 24/08/2017 à 21h53.

  9. Publicité
  10. #38
    ansset

    Re : Trouver les x,y,z tel que x*y*z = N

    Citation Envoyé par minushabens Voir le message
    mais de toutes manières, qu'on monte ou qu'on descende deux boucles sont suffisantes.
    ça, c'est juste,
    le reste, c'était uniquement pour te titiller un peu...
    m'en veux pas ?
    y'a quelque chose qui cloche là dedans, j'y retourne immédiatement !

  11. #39
    Floklo

    Re : Trouver les x,y,z tel que x*y*z = N

    Citation Envoyé par minushabens Voir le message
    une autre approche consiste à faire des boucles descendantes:

    pour i variant de N à 1
    si i divise N
    {
    pour j variant de i à 1
    si j divise N/i renvoyer le triple (i,j,n/(ij)) sinon rien
    } sinon rien
    }
    Salut minushabens,

    Je crois ne pas très bien avoir compris ta méthode.
    J'ai fait ça, peux tu me dire où ça cloche ?
    Code:
    N = 36
    liste_triplet = []
    liste_sol =[]
    
    for i in xrange(N,0,-1):
        
        if N%i == 0:
            
            for j in xrange(N/i,0,-1):
                
                if (N/i)%j == 0:
                    
                    liste_triplet.append(i)
                    liste_triplet.append(j)
                    liste_triplet.append(N/(i*j))
                    liste_sol.append(liste_triplet)
                    
    print liste_sol

  12. #40
    minushabens

    Re : Trouver les x,y,z tel que x*y*z = N

    effectivement j'ai négligé un problème. Dans la deuxième boucle il faut soit s'arrêter à la racine carrée de N/i (ce qui est le plus propre) soit vérifier que le troisième nombre (N/(ij) ) est inférieur ou égal à j.

  13. #41
    minushabens

    Re : Trouver les x,y,z tel que x*y*z = N

    je l'ai programmé sous R, même si tu ne connais pas tu devrais comprendre.

    Code:
    #-----------------------------------
    # d3f : décomposition en 3 facteurs
    #-----------------------------------
    function(n)
    {
    result<-NULL
    n2<-ceiling(sqrt(n))
    for(i in n:n2) 
       if (n%%i==0)
       {
         ni<-n/i
         ni2<-ceiling(sqrt(ni))
       for(j in ni:ni2) 
       if (ni%%j==0)
       result<-rbind(result,c(i,j,n/(i*j)))
       }
    
    return(result)
    }
    Code:
    > d3f(36)
         [,1] [,2] [,3]
    [1,]   36    1    1
    [2,]   18    2    1
    [3,]   12    3    1
    [4,]    9    4    1
    [5,]    9    2    2
    [6,]    6    6    1
    [7,]    6    3    2
    Dernière modification par minushabens ; 25/08/2017 à 09h45.

  14. #42
    Duongnh

    Re : Trouver les x,y,z tel que x*y*z = N

    you can try this code :
    x = int
    y= int
    z=int

    liste_triplets = []

    N = 36


    for i in range(1,N):

    x = i

    for j in range(1,N):

    y = j

    for k in range(1,N):

    z =k

    if x*y*z == N:

    if z >= y and y >= x: #modification

    liste_nbr = [x,y,z]
    liste_triplets.append(liste_nb r)


    print liste_triplets

  15. #43
    Floklo

    Re : Trouver les x,y,z tel que x*y*z = N

    Salut Duongnh,

    je remarque que tu as juste copier/coller le code que j'ai posté message #6...

  16. #44
    danyvio

    Re : Trouver les x,y,z tel que x*y*z = N

    Je ne connais pas Python mais j'ai quelques années de programmation au compteur...
    Perso, j'aurais raisonné ainsi (pardon pour le manque de tabulations)

    pour i de 1 à N

    ..........pour j de i+1 à N

    .................pour k de j+1 à N

    .................. Si i*j*k = N alors (enregistrer résultat)
    .................. FinSi
    .................FinPour
    ...........FinPour
    FinPour

    FIN
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

  17. #45
    danyvio

    Re : Trouver les x,y,z tel que x*y*z = N

    Citation Envoyé par danyvio Voir le message
    Je ne connais pas Python mais j'ai quelques années de programmation au compteur...
    Perso, j'aurais raisonné ainsi (pardon pour le manque de tabulations)

    pour i de 1 à N

    ..........pour j de i+1 à N

    .................pour k de j+1 à N

    .................. Si i*j*k = N alors (enregistrer résultat)
    .................. FinSi
    .................FinPour
    ...........FinPour
    FinPour

    FIN
    pour affiner et éviter des calculs inutiles "aux limites" , on peut améliorer ainsi :
    pour i de 1 à N-2

    ..........pour j de i+1 à N-1

    .................pour k de j+1 à N

    .................. Si i*j*k = N alors (enregistrer résultat)
    .................. FinSi
    .................FinPour
    ...........FinPour
    FinPour

    FIN
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

  18. #46
    Chanur

    Re : Trouver les x,y,z tel que x*y*z = N

    Bonjour,
    Citation Envoyé par danyvio Voir le message
    (pardon pour le manque de tabulations)
    Pour conserver les indentations, il suffit de mettre le code entre des balises [code] (icone # dans l'éditeur avancé).
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  19. #47
    Tryss2

    Re : Trouver les x,y,z tel que x*y*z = N

    Une façon plus optimisée de répondre à la question :

    Code:
    import math
    FactorsCount = 3
    
    def factor( data ):
      if (len(data) == FactorsCount ) :
        print(data)
        return
      
      if len(data) == 1 :
        N = data[-1]
        minV = 1
        maxV = int(math.sqrt(N))
      else :
        N = data[-1]
        minV = data[-2]
        maxV = int(math.sqrt(N))
        
      for i in range(minV,maxV+1) :
        if N%i == 0 :
          nextData = data[:-1]+[i,int(N/i)]
          factor(nextData)
          
          
      
      
    factor( [67453554] )
    A noter que l'on peut facilement modifier le nombre de facteurs

  20. #48
    ourdia

    Re : Trouver les x,y,z tel que x*y*z = N

    Bonsoir.
    Il faut faire une condition juste avant l'affichage du resultat pour éliminer les redondants, la condition à faire est: si le Resultat est différant de N il le prend en considération sino il va l'ignorer ou bien il peut l'afficher comme doublant.
    Mais il faut initialisé le N au départ, par exemple: N =1
    J'espère que ma repense comporte de nouveau pour vous.
    Cordialement

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. trouver n
    Par AsmaSasuki dans le forum Mathématiques du supérieur
    Réponses: 6
    Dernier message: 20/12/2015, 00h15
  2. Où trouver un RWT 05 ?
    Par bartsamtab2 dans le forum Électronique
    Réponses: 3
    Dernier message: 02/08/2014, 13h43
  3. ou trouver des Led IR 8 mm 840 nm ?
    Par invite087433723 dans le forum Électronique
    Réponses: 4
    Dernier message: 28/12/2009, 11h10
  4. Réponses: 5
    Dernier message: 15/11/2008, 18h39
  5. Ou trouver ca ?
    Par Tix dans le forum Électronique
    Réponses: 8
    Dernier message: 01/08/2006, 07h50