Calculer diviseurs entiers - urgent

Résolu
cs_Herine Messages postés 9 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 5 novembre 2009 - 2 nov. 2009 à 10:07
cs_Herine Messages postés 9 Date d'inscription lundi 2 novembre 2009 Statut Membre 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
A voir également:

15 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
2 nov. 2009 à 10:28
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
2
cs_Herine Messages postés 9 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 5 novembre 2009 6
2 nov. 2009 à 10:47
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?
1
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
2 nov. 2009 à 10:52
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
1
cs_Herine Messages postés 9 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 5 novembre 2009 6
2 nov. 2009 à 10:56
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++;
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
2 nov. 2009 à 11:02
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
1
cs_Herine Messages postés 9 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 5 novembre 2009 6
2 nov. 2009 à 11:10
Merci beaucoup!!!

Je vais taper le code entier, si j'ai un soucis, je reviens vite ici
1
cs_Herine Messages postés 9 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 5 novembre 2009 6
2 nov. 2009 à 11:58
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?
1
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
2 nov. 2009 à 12:33
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
1
cs_Herine Messages postés 9 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 5 novembre 2009 6
2 nov. 2009 à 12:41
ah oui logique. Mais si je veux les tester, je dois rajouter une autre boucle alors?
1
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
2 nov. 2009 à 12:48
Salut,

Les tester ? Tester quoi ?
______________________________________
DarK Sidious
1
cs_Herine Messages postés 9 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 5 novembre 2009 6
2 nov. 2009 à 14:21
ben si je veux quand même tester n / n ?
1
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
2 nov. 2009 à 14:24
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
1
cs_Herine Messages postés 9 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 5 novembre 2009 6
2 nov. 2009 à 16:58
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?
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
2 nov. 2009 à 22:04
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
0
cs_Herine Messages postés 9 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 5 novembre 2009 6
5 nov. 2009 à 21:06
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
0
Rejoignez-nous