Calculer diviseurs entiers - urgent [Résolu]

Messages postés
9
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
5 novembre 2009
- - Dernière réponse : cs_Herine
Messages postés
9
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
5 novembre 2009
- 5 nov. 2009 à 21:06
Bonjour,

Je viens de découvrir ce forum qui a l'air pas mal du tout.

Je dois écrire un programme java qui compte le nombre de diviseurs entiers d'un entier positif.
Est-ce que vous pouvez m'aider?

Les maths remontent à loin et j'avoue que rien que l'intitulé me pose déjà problème.

Voici comment je le comprends : l'entier positif n. Disons que n 10.
Donc je dois tester si n peut être divisé par
--> n
--> n - 1
--> n - 2
--> ....
jusqu'à que j'arrive à n divisé par 0.

C'est ça?

Merci bcp
Herine
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
1
Merci
Salut,

Disons plutôt que tu dois tester si n est divisible par 2, 3, etc jusqu'à n / 2 (en effet, n ne sera jamais divisible par un nombre supérieur à n / 2 vu qu'il ne peux au minimum qu'être divisé par 2).
______________________________________
DarK Sidious

Merci cs_DARKSIDIOUS 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
9
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
5 novembre 2009
1
Merci
Merci Dark Sidious pour ta réponse.

Donc dans mon exemple, ce serait 5 le max.
Mais si j'ai un nombre beaucoup plus grand, genre 1355678. Je dois donc aussi tester n /1, puis n / 2, .... jusque n / n/2.

Y a moyen de faire cela avec une boucle for?

Merci cs_Herine 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_Herine
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
1
Merci
Salut,

Encore heureux !

Il te suffit de tester le modulo de ton nombre avec le diviseur : si ca donne 0, c'est qu'il s'agit d'un diviseur :
int n = 1355678;
int nombreDiviseurs = 0;
for (int i = 0; i < n / 2; i++) {
  if (n % i == 0) {
    nombreDiviseurs++;
  }
}


______________________________________
DarK Sidious

Merci cs_DARKSIDIOUS 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
9
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
5 novembre 2009
1
Merci
Re...

Deux questions :

1) le modulo de ton nombre avec le diviseur :
c'est quoi le modulo?

2) int n = 1355678;
int nombreDiviseurs = 0;
for (int i = 0; i < n / 2; i++) {
if (n % i == 0) {
nombreDiviseurs++;
}
}

tout compris sauf : nombreDiviseurs++;

Merci cs_Herine 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_Herine
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
1
Merci
Salut,

1/ Le modulo c'est le reste de la division entière entre le premier et le second nombre (opérateur % en java).

2/ L'opérateur ++ en java permet d'incrémenter la valeur d'une variable de 1, ce qui équivaut à : nombreDiviseurs = nombreDiviseurs + 1;
______________________________________
DarK Sidious

Merci cs_DARKSIDIOUS 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
9
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
5 novembre 2009
1
Merci
Merci beaucoup!!!

Je vais taper le code entier, si j'ai un soucis, je reviens vite ici

Merci cs_Herine 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_Herine
Messages postés
9
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
5 novembre 2009
1
Merci
Re Dark Sidious,

Dis, y a un truc qui me chiffonne. Je suis pas certaine d'avoir bien lu ton explication donnée plus haut.
On a dit que n ne peut pas être divisé par un nombre plus grand que n/2 mais n peut être divisé par lui-même.
Si je veux ajouter ça dans le code, on fait comment?

Merci cs_Herine 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_Herine
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
1
Merci
Salut,

Oui n peut forcément être divisé par lui même, ainsi que par 1... donc tu peux un peu optimiser le code :

int n =  1355678;
int nombreDiviseurs =  2 ; // au moins divisible par lui même et par un
for (int i  = 2; i < n / 2; i++) {
  if (n % i == 0) {
    nombreDiviseurs++;
  }
}

______________________________________
DarK Sidious

Merci cs_DARKSIDIOUS 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
9
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
5 novembre 2009
1
Merci
ah oui logique. Mais si je veux les tester, je dois rajouter une autre boucle alors?

Merci cs_Herine 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_Herine
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
1
Merci
Salut,

Les tester ? Tester quoi ?
______________________________________
DarK Sidious

Merci cs_DARKSIDIOUS 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
9
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
5 novembre 2009
1
Merci
ben si je veux quand même tester n / n ?

Merci cs_Herine 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_Herine
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
1
Merci
Salut,

Pourquoi vouloir tester n / n et n / 1 ? Ce sont 2 cas triviaux...

Pour des raisons d'optimisation, il vaut mieux s'arrêter à n / 2 !!! Car sinon ca multiplie par 2 le nombre de test à faire ! Surtout que l'opérateur modulo est loin d'être le moins couteux des opérateurs...
______________________________________
DarK Sidious

Merci cs_DARKSIDIOUS 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
9
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
5 novembre 2009
0
Merci
oui tu as raison.

Par contre, j'ai fini d'écrire le code et, sauf erreur, en fait on ne peut pas mettre
nombreDiviseurs = 2

parce que de toute façon, on passe par un. Et si on entre zero comme entier, il indique 1 comme résultat et ça c'est faux.

C'est correct?
Commenter la réponse de cs_Herine
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

C'est parce que tu n'a pas compris l'algorithme :
On commence à 2, et on va jusqu'à n/2 : 1 et n sont FORCEMENT des diviseurs de n, donc le nombre de diviseur est au moins 2. Pour le nombre 0, c'est l'infini : tout les nombres sont diviseurs de 0 : 0 / 1 0, 0 / 2 0, etc, à toi de gérer ce cas là.

______________________________________
DarK Sidious
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
9
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
5 novembre 2009
0
Merci
Bonsoir Dark Sidious,

Sorry de te répondre si tard.
Oui en effet, j'avais pas compris. Et y a un truc que je ne comprends toujours pas. Quand est-ce que n se divise par lui-même?

Dis, j'ai un autre exercice à faire pour demain (reçu en fin d'après-midi). Est-ce que tu veux bien m'aider?
J'ai déjà écrit une partie du code.

Merci
Herine
Commenter la réponse de cs_Herine

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.