Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4745 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Pourquoi 15 est premier ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pourquoi 15 est premier ?

n°224658
EpoK
Let's burn
Posté le 07-10-2002 à 20:16:41  profilanswer
 

Code :
  1. public static boolean premier(int p)
  2. {
  3. int i;
  4. boolean b=false;
  5. i=(p-1);
  6. while(i>1)
  7.  {
  8.  if((p%i)==0)
  9.   {
  10.   b=false;
  11.   }
  12.  else
  13.   {
  14.   b=true;
  15.   }
  16.  i=i-1;
  17.  }
  18.  return b;
  19. }


 
 :cry:  pk ?  :cry:  
 
15%5=0 alors pk y me sort :
 

Code :
  1. c:\Java\jdk1.1.8\bin>java Premier
  2. a : 15
  3. Premier : true

mood
Publicité
Posté le 07-10-2002 à 20:16:41  profilanswer
 

n°224664
HappyHarry
Posté le 07-10-2002 à 20:26:09  profilanswer
 

paske tu t'arretes pas quand tu as trouve un diviseur
et tu peux t'arreter a p/2 pour la recherche des diviseurs, c suffisant

n°224665
Je@nb
Kindly give dime
Posté le 07-10-2002 à 20:34:48  profilanswer
 

Ben fo faire le suivi de variable.
p = 15
i = 14
 
Boucle :
1er passage : b = true (p%i = 1) i=13
2ème passage : b = true (p%i = 2) i=12
3            : b = true (p%i = 3) i=11
4            : b = true (p%i = 4) i=10
5            : b = false i=9
....
(i=5)             : b = false i=4
...
i=2               : b = true (p%i=1) i=1
 
Fin de la boucle car si i=1 alors i n'est pas strictement sup à 1
 
Donc ça renvoie true.
A mon avis ta échangé false et true


Message édité par Je@nb le 07-10-2002 à 20:35:13
n°224667
HappyHarry
Posté le 07-10-2002 à 20:38:40  profilanswer
 

c exact
 
l'algo correct serait
 
pour i=2 jusqu'a p/2 repeter
si p%i==0 alors
renvoyer faux
fin si
fin pour
renvoyer vrai

n°224669
EpoK
Let's burn
Posté le 07-10-2002 à 20:40:05  profilanswer
 

Code :
  1. i=(p-1);
  2. while(i>1 && i>(p/2))
  3.  {
  4.  if((p%i)==0)
  5.   {
  6.   b=false;
  7.   i=0;
  8.   }
  9.  else
  10.   {
  11.   b=true;
  12.   }
  13.  i=i-1;
  14.  }
  15.  return b;
  16. }


 
sans le i>(p/2) ca marche et avec le i>(p/2)) 15 ets denouvo premier  :cry:

n°224672
HappyHarry
Posté le 07-10-2002 à 20:42:50  profilanswer
 

euh ... pour s'arreter a p/2 faut commencer dans l'autre sens ;)
 
tu commences a 2 et tu t'arretes a p/2

n°224680
EpoK
Let's burn
Posté le 07-10-2002 à 20:46:54  profilanswer
 

Code :
  1. i=2;
  2. while(i>(p/2))
  3.  {
  4.  if((p%i)==0)
  5.   {
  6.   b=false;
  7.   i=0;
  8.   }
  9.  else
  10.   {
  11.   b=true;
  12.   }
  13.  i=i+1;
  14.  }
  15.  return b;
  16. }


 
11 est pu premier  :cry:

n°224686
HappyHarry
Posté le 07-10-2002 à 20:49:50  profilanswer
 

Code :
  1. i=2;
  2. b=true;
  3. while(i<(p/2) && b)
  4. {
  5.  if((p%i)==0)
  6.  {
  7.   b=false;
  8.  }
  9.  else
  10.  {
  11.   i--;
  12.  }
  13. }
  14. return b;

n°224689
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 07-10-2002 à 20:53:08  profilanswer
 

Code :
  1. for(i=2; i<(p/2); --i)
  2. {
  3.   if(p%i ==0)
  4.      return false;
  5. }
  6. return false;


 
 
mais il me semble qu'on peut meme s'arreter à sqrt(p)


---------------
du bon usage de rand [C] / [C++]
n°224694
HappyHarry
Posté le 07-10-2002 à 20:54:48  profilanswer
 

Taz@PPC a écrit a écrit :

Code :
  1. for(i=2; i<(p/2); --i)
  2. {
  3.   if(p%i ==0)
  4.      return false;
  5. }
  6. return true;


 
 
mais il me semble qu'on peut meme s'arreter à sqrt(p)




 
ca je sais pas ... p/2 c sur
et renvoyer vrai c mieux  ;)


Message édité par HappyHarry le 07-10-2002 à 20:57:45
mood
Publicité
Posté le 07-10-2002 à 20:54:48  profilanswer
 

n°224698
EpoK
Let's burn
Posté le 07-10-2002 à 20:56:09  profilanswer
 

ok
merci

n°224751
Ace17
Posté le 07-10-2002 à 21:25:32  profilanswer
 

EpoK a écrit a écrit :

ok
merci




 
On peut s'arreter a sqrt(p), c'est certain.

n°224861
gfive
Posté le 08-10-2002 à 08:56:07  profilanswer
 

Pis bon, on peut aussi un tantinet améliorer les choses, en commençant par vérifier si par hasard le nombre est pas pair, et ensuite en ne prenant en compte que les diviseurs impairs, pasque bon.....
 
Enfin, en temps de calcul, s'arrêter à sqrt(p), je sais pas si c'est une bonne solution : le calcul de sqrt prendra sans doute plus de temps que la vérification un peu astucieuse jusqu'à p/2, non???


Message édité par gfive le 08-10-2002 à 09:02:06
n°224867
BettaSplen​dens
Tout cul tendu mérite son dû
Posté le 08-10-2002 à 09:03:41  profilanswer
 

même à racine de P pour s'arreter...
perso, pour les nb premiers, je préfère largement le crible d'Eratostène ! bcp plus rapide !


---------------
Tout cul tendu mérite son dû
n°224880
darklord
You're welcome
Posté le 08-10-2002 à 09:18:37  profilanswer
 

excellent le titre du topic [:ddr555]


---------------
Just because you feel good does not make you right
n°224901
BifaceMcLe​OD
The HighGlandeur
Posté le 08-10-2002 à 10:04:39  profilanswer
 

Il serait préférable d'écrire ceci à la place de ce que tu as posté en haut de ce topic (plus lisible) :

Code :
  1. public static boolean premier(int p) {
  2.   boolean  b = false;
  3.   int      i = p - 1;
  4.   while (i > 1) {
  5.     b = ((p % i) != 0);
  6.     i--; 
  7.   }
  8.   return b;
  9. }


 
Plusieurs remarques :

  • Effectivement, il y a un bug : d'après le code, b est à true si p a un diviseur. Dommage...
  • C'est un peu bête de ne pas s'arrêter dès qu'on sait que le nombre n'est pas premier.


Si maintenant on tient compte des remarques (judicieuses) qui t'ont été faites par les autres forumeurs, plus quelques tests aux limites supplémentaires, cela donne :

Code :
  1. public static boolean premier(int p) {
  2.   if (p <= 1) {
  3.     return false;
  4.   }
  5.   if ((p % 2) == 0) {
  6.     return (p == 2);
  7.   }
  8.   int  max = p / 2;
  9.   int  i   = 3;
  10.   while (i < max) {
  11.     if ((p % i) != 0) {
  12.       return false;
  13.     }
  14.     i += 2;
  15.   }
  16.   return true;
  17. }


Message édité par BifaceMcLeOD le 08-10-2002 à 10:04:50
n°224924
benou
Posté le 08-10-2002 à 10:32:35  profilanswer
 

EpoK a écrit a écrit :

Code :
  1. public static boolean premier(int p)
  2. {
  3. int i;
  4. boolean b=false;
  5. i=(p-1);
  6. while(i>1)
  7.  {
  8.  if((p%i)==0)
  9.   {
  10.   b=false;
  11.   }
  12.  else
  13.   {
  14.   b=true;
  15.   }
  16.  i=i-1;
  17.  }
  18.  return b;
  19. }






beurk. elle est pas belle ton indentation : c'est moche de metter les '{' à la ligne ! :(

n°224933
darklord
You're welcome
Posté le 08-10-2002 à 10:48:11  profilanswer
 

rabat-joie  :kaola:


---------------
Just because you feel good does not make you right
n°224935
benou
Posté le 08-10-2002 à 10:50:18  profilanswer
 

DarkLord a écrit a écrit :

rabat-joie  :kaola:  




j'aime pas le parenthèsage qui mutiplie la longueur du code par 2  :o

n°225004
BettaSplen​dens
Tout cul tendu mérite son dû
Posté le 08-10-2002 à 13:15:16  profilanswer
 

benou a écrit a écrit :

 
j'aime pas le parenthèsage qui mutiplie la longueur du code par 2  :o  



idem, je suis aussi d'accord... ça devient illisible si faut tout faire défiler pour 3 malheureuses lignes de code !


---------------
Tout cul tendu mérite son dû
n°225005
lorill
Posté le 08-10-2002 à 13:18:39  profilanswer
 

benou a écrit a écrit :

 
j'aime pas le parenthèsage qui mutiplie la longueur du code par 2  :o  




 
j'ose ? j'ose pas ? j'ose ? j'ose pas ?
allez, j'ose : PYTHON ROXOR

n°225207
Ace17
Posté le 08-10-2002 à 17:59:20  profilanswer
 

benou a écrit a écrit :

 
beurk. elle est pas belle ton indentation : c'est moche de metter les '{' à la ligne ! :(




 
Arrete! C'est beaucoup plus lisible au contraire!
Chaque accolade est alignée avec son homologue!

n°225264
Carbon_14
Posté le 08-10-2002 à 20:23:47  profilanswer
 

Moi, c'est comme ça que je fais (ce qui n'est pas une référence  :lol:). Je trouve ça lisible d'une façon limpide.
 
En QuickBasic, on fait aussi comme ça . :D  
 
Y en a qui préfèrent if () {
                     ....
                     }
Chacun sa méthode. :ange:

n°225265
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 08-10-2002 à 20:28:55  profilanswer
 

le fameux troll de l'accolade ouvrante. c'est en rien typique d'un langage de programamtion, c'est juste un style.
 
et si zetes pas contents, faites du Python  :sol:


---------------
du bon usage de rand [C] / [C++]
n°225267
Ace17
Posté le 08-10-2002 à 20:31:07  profilanswer
 

Taz@PPC a écrit a écrit :

 
et si zetes pas contents, faites du Python  :sol:  




ca a quoi de particulier?

n°225270
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 08-10-2002 à 20:33:35  profilanswer
 

c'est l'indentation qui définit les bloc et pas des {} ou des begin/end. y a pas de ; non plus
 

Code :
  1. def fibonacci(terme_max):
  2.     if(terme_max<0):
  3.         return []
  4.     elif(terme_max==0):
  5.         return [0]
  6.     elif(terme_max==1):
  7.         return [0, 1]
  8.     else:
  9.         terme_NM2, terme_NM1 = 0, 1
  10.         fibo=[0]
  11.         for i in range(1, terme_max) :
  12.             fibo.append(terme_NM1)
  13.             terme_NM2, terme_NM1 = terme_NM1, terme_NM1+terme_NM2
  14.         return fibo
  15. print """Suite de Fibonacci : jusqu'à quel terme voulez vous calculer ?"""
  16. i_terme=int(raw_input('Entrez un entier positif : '))
  17. print fibonacci(i_terme)


Message édité par Taz@PPC le 08-10-2002 à 20:34:53

---------------
du bon usage de rand [C] / [C++]
n°225293
Carbon_14
Posté le 08-10-2002 à 21:45:25  profilanswer
 

On laissera aux spécialistes. :)

n°225317
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 08-10-2002 à 22:24:36  profilanswer
 

c pas pour le code (simple cependant), juste pour vous montrer que l'indentation suffit sommes toutes


---------------
du bon usage de rand [C] / [C++]
n°225326
phenixl
Posté le 08-10-2002 à 22:45:36  profilanswer
 

Taz@PPC a écrit a écrit :

le fameux troll de l'accolade ouvrante. c'est en rien typique d'un langage de programamtion, c'est juste un style.
 
et si zetes pas contents, faites du Python  :sol:  




 
C'est une question de convention pas de "style"...  
 
Maintenant libre a chacun d'adopter les conventions qui lui plaisent (du moment qu'il travaille avec des gens qui adoptent les memes conventions que lui bien sur... sinon tout le monde pete un plomb)
 
Au passage, l'accolade a la ligne est une convention C++, tout comme l'est la nomination des variables par "m_variable" ;)

n°225940
benou
Posté le 09-10-2002 à 23:03:25  profilanswer
 

y a quand même une suptilité : y a une des 2 méthode qui est la convention de codage java et pas l'autre : http://java.sun.com/docs/codeconv/ [...] 0.html#182
 
 :kaola:

n°226041
BifaceMcLe​OD
The HighGlandeur
Posté le 10-10-2002 à 10:12:57  profilanswer
 

Les conventions de codage recommandées par Sun ne sont pas un hasard : d'après les nombreuses études qui ont été menées sur le sujet depuis pas mal d'années, ce sont celles qui sont les plus efficaces pour faire appréhender au lecteur la structure du code d'un seul coup d'oeil, puis faciliter la lecture et la compréhension de ce code.
 
En particulier, pour revenir au sujet de la position de l'accolade ouvrante, c'est la structure de bloc abstrait qui semble la plus efficace pour comprendre le plus rapidement possible la structure de contrôle (début, fin, condition d'arrêt) :

while ####### begin
    ########
    ########
end
 
for ####### begin
    ########
    ########
end
 
 
if ####### then
    ########
    ########
else
    ########
    ########
end
 
function ####### begin
    ########
    ########
end


Message édité par BifaceMcLeOD le 10-10-2002 à 10:16:20
n°226069
phenixl
Posté le 10-10-2002 à 10:38:28  profilanswer
 

benou a écrit a écrit :

y a quand même une suptilité : y a une des 2 méthode qui est la convention de codage java et pas l'autre : http://java.sun.com/docs/codeconv/ [...] 0.html#182
 
 :kaola:  




 
;)

n°226529
LeGreg
Posté le 11-10-2002 à 04:18:09  profilanswer
 

"i divise p et i > racine de p
ssi p/i divise p et p/i < racine de p"
cqfd
donc tu peux t'arreter a racine de p (inclus of course)
 
LeGreg

n°226567
phenixl
Posté le 11-10-2002 à 09:27:36  profilanswer
 

legreg a écrit a écrit :

"i divise p et i > racine de p
ssi p/i divise p et p/i < racine de p"
cqfd
donc tu peux t'arreter a racine de p (inclus of course)
 
LeGreg




 
Utilisation abusive de cqfd... qu'as tu demontre ? rien !
 
:lol:
 
(je sais je chipotte)

n°226993
LeGreg
Posté le 11-10-2002 à 19:01:47  profilanswer
 

j'ai demontre qu'on pouvait s'arreter a la racine de p
 
qu'est-ce que j'y peux si la demonstration tient
en une ligne??
 
LeGreg

n°227159
lorill
Posté le 12-10-2002 à 02:10:09  profilanswer
 

ben dans ce cas le cqfd est une ligne trop haut, mais bon, on s'en fout :D

n°227176
Ace17
Posté le 12-10-2002 à 10:43:39  profilanswer
 

lorill a écrit a écrit :

ben dans ce cas le cqfd est une ligne trop haut, mais bon, on s'en fout :D  




ben dites donc... vous avez pas l'air d'aimer les démonstrations vous :)

n°241425
Clie
Posté le 07-11-2002 à 17:44:22  profilanswer
 

EpoK a écrit a écrit :

Code :
  1. public static boolean premier(int p)
  2. {
  3. int i;
  4. boolean b=false;
  5. i=(p-1);
  6. while(i>1)
  7.  {
  8.  if((p%i)==0)
  9.   {
  10.   b=false;
  11.   }
  12.  else
  13.   {
  14.   b=true;
  15.   }
  16.  i=i-1;
  17.  }
  18.  return b;
  19. }


 
 :cry:  pk ?  :cry:  
 
15%5=0 alors pk y me sort :
 

Code :
  1. c:\Java\jdk1.1.8\bin>java Premier
  2. a : 15
  3. Premier : true






Initialise b a true
et ajoute la condition b == true dans ton while
Parcequ'une fois qu'il est pas premier, il est pas premier !!!

n°241426
HappyHarry
Posté le 07-11-2002 à 17:48:44  profilanswer
 

ouh le déterrage de topic !!!
 
(surtout ceux ou on avait deja donné la solution ;) )

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Pourquoi 15 est premier ?

 

Sujets relatifs
UNIX Scheme... faire un algo qui dit si un nombre est premier[C/C++] Générer un nombre premier à 30 chiffres
premier caractere d'une chaineComment faire passer une application au premier plan ?
[php] trouver la premier place ou inserer un enregistrement (résolu)[Jsp/Servlet] Problème lors du premier forward depuis ma servlet
[X-ModPlug] Mon premier site en PHPun avis pour mon premier site????
[Premier pas en delphi] InputQuery ??? , Creation d'un menu???[ PHP ] Des connaisseurs pour améliorer mon premier script ;-)
Plus de sujets relatifs à : Pourquoi 15 est premier ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)