Nombres composés
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Nombres composés



  1. #1
    snsdtiti

    Nombres composés


    ------

    Bonjour !

    J'ai un petit problème avec mon programme (en java), je dois écrire un algorithme qui affiche les nombres premiers d'un nombre composé (je sais pas si c'est claire ^^')
    Voici mon code :
    Code:
    public class PrimeFactors {
        public List<Integer> computeFactors(int number) {
    
            List<Integer> list= new ArrayList<Integer>();
            int i=2, nbp=0;
    
            if (number==1) {
                return list;
            }
            while (number > 0) {
                for (i = 2; i < 100; i++) {
                    if (i % 1 == 0 && i % i == 0) {
                        nbp = i;
                        if (number == nbp) {
                            list.add(number);
                            return list;
                        }
                        if (number % nbp == 0 ){
                            number = number / nbp;
                            list.add(nbp);
                        }
    
                    }
                }
            }
    
            return list;
    
        }
    }
    Il y a une série de test à faire que j'ai réussi à passer (tels que 2 donne [2] ou encore 4 donne [2,2]...) Le problème c'est que justement il y a un test que j'arrive pas à passer.... quand j'entre 8 c'est censé donner [2,2,2] sauf que ça m'affiche [2,4].... Je ne vois pas du tout d'où vient le problème.

    Je vous remercie d'avance d'avoir lu tout mon post ^^

    -----
    Dernière modification par snsdtiti ; 01/02/2020 à 20h48.

  2. #2
    Jack
    Modérateur

    Re : Nombres composés

    je ne comprends pas l'intérêt du i % i == 0 vu qu'on connait le résultat

  3. #3
    Jack
    Modérateur

    Re : Nombres composés

    le i % 1 == 0 est également curieux.

    Bref (je ne connais pas java), l'expression (i % 1 == 0 && i % i == 0) me semble être toujours vraie

  4. #4
    snsdtiti

    Re : Nombres composés

    Merci pour ta réponse ^^
    Pour les i%1 et i%i c'est pour définir les nombres premiers d'après ce que j'ai compris de la définition les nombres sont premier si il sont uniquement divisible par 1 ou par eux-même....

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : Nombres composés

    et à ton avis, quel est le modulo, donc le reste de la division entière d'un nombre par 1 ou par lui-même?

  7. #6
    snsdtiti

    Re : Nombres composés

    Ahhhhh oui c'est égal à zéro mais tous les chiffres se trouvent dans la même position j'y avais pas pensé o_o !
    Attend mais comment faire du coup ?

  8. #7
    snsdtiti

    Re : Nombres composés

    Merci pour tes réponses !
    J'ai trouvé la solution en enlevant les for qui ne servaient à rien voila :
    Code:
    public class PrimeFactors {
        public List<Integer> computeFactors(int number) {
    
            List<Integer> list= new ArrayList<Integer>();
            int i=2;
    
            if (number==1) {
                return list;
            }
            while (number != 1) {
    
                if (number == i) {
                    list.add(number);
                    return list;
                }
                if (number % i == 0) {
                    number = number / i;
                    list.add(i);
                }
                else {
                    i++;
                }
            }
            return list;
    
        }
    }
    Encore Merci !

  9. #8
    raymolk

    Re : Nombres composés

    Citation Envoyé par snsdtiti Voir le message
    je dois écrire un algorithme qui affiche les nombres premiers d'un nombre composé (je sais pas si c'est claire ^^')
    La décomposition en facteurs premiers d'un nombre entier
    Citation Envoyé par snsdtiti Voir le message
    Je vous remercie d'avance d'avoir lu tout mon post ^^
    Ben non, pas d'avance du coup

    Bon sinon, tu peux faire une petite optimisation de ton code en #7 :
    - la condition « number != 1 » est inutile, tu peux mettre un « while (true) » (je sais pas si ça s'écrit comme ça en java, mais en tout cas la condition d'arrêt effective est dans la boucle ici : c'est « number == i ») ;
    - tu peux extraire le cas i=2 de la boucle, et faire ensuite i+=2 au lieu de i++ : le code ira deux fois plus vite.

  10. #9
    minushabens

    Re : Nombres composés

    à mon avis il y a un problème avec le test

    while(number>0)

    puisque quand tu trouves un facteur premier tu divises number par ce facteur avant de faire une nouvelle itération, tu n'arriveras pas à zéro mais à un. D'autre part si le nombre donné est négatif ça ne marchera pas (et les nombres entiers négatifs ont droit comme les autres à leur décomposition en facteurs premiers)

  11. #10
    raymolk

    Re : Nombres composés

    @minushabens : snsdtiti a complètement revu son code en #7, donc je pense que son premier essai peut être totalement ignoré (il n'a à peu près pas de sens comme le montre la discussion qui suit).
    Et le code en #7 gère (sans que ce soit forcément voulu ?) les entiers négatifs (edit : non, il manque en fait un petit quelque chose sur la condition d'arrêt interne au while…).
    Par contre, il faudrait tester quelque part que number est différent de 0, car sinon la boucle while est infinie.
    Mais comme il s'agit d'une méthode de classe, il n'est pas impossible que la classe teste la validité de ses attributs ailleurs… (number est-il forcément un attribut de la classe, je n'en sais rien : je ne connais pas java).
    Dernière modification par raymolk ; 02/02/2020 à 08h12.

  12. #11
    pm42

    Re : Nombres composés

    Le code en #7 est correct mais les 2 "if" ne servent à rien (j'ai vérifié vite fait). Il fonctionne pareil sans.

    Citation Envoyé par raymolk Voir le message
    Par contre, il faudrait tester quelque part que number est différent de 0, car sinon la boucle while est infinie.
    Mais comme il s'agit d'une méthode de classe, il n'est pas impossible que la classe teste la validité de ses attributs ailleurs….
    Le code est incomplet en effet. number est juste une variable locale. Telle que le classe est écrite, tu peux voir computeFactors comme une fonction pure : elle prend un argument, elle renvoie un résultat et elle ne modifie rien en dehors de locales.

    Donc s'il doit y avoir des vérifications d'arguments, on peut les faire ailleurs en effet. Ou en début de fonction mais cela compliquerait le code pour un simple exercice.

    On pourrait aussi ajouter un critère d'arrêt pour accélérer les tests en cas de nombre premier (ou du dernier diviseur) : on pourrait s'arrêter dès que i a dépassé la racine carrée de number mais là aussi, c'est juste pour se faire plaisir.

Discussions similaires

  1. Comptage de nombres premiers a partir des nombres composes
    Par invite98d93111 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 13/11/2015, 19h42
  2. Nombres composés et symétries axiales sur un disque
    Par Archyves dans le forum Mathématiques du supérieur
    Réponses: 6
    Dernier message: 25/07/2013, 21h44
  3. Nombres de composés créés par une réaction et stereisomere
    Par invitefee378b0 dans le forum Chimie
    Réponses: 7
    Dernier message: 20/11/2012, 23h10
  4. Réponses: 3
    Dernier message: 25/09/2007, 12h26
  5. Dénombrement approché des nombres premiers ou composés
    Par invite3443c7ee dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 15/08/2007, 19h59