[HELP!]probleme dans mon programme

probleme dans mon programme [HELP!] - C++ - Programmation

Marsh Posté le 20-12-2005 à 17:23:03    

Bon j'ai fait un petit programme qui est sensé déterminer si un nombre est premier ou pas...
Le problème est à l'intérieur de la boucle for...
Quand un nombre n'est ni divisible par 2, ni par 3, il se met en boucle ininterrompue et je trouve pas pourquoi!
(j'ai pas encore mis de quoi quitter mais ça n'a pas d'importance je le ferai + tard...)
 
A l'occaz une petite simplification ne se refuse pas... Mon script doit être bourré de fautes car C mon 1er prog en C++ et je n'ai jamais eu de formation  :(  
 

Code :
  1. #include <iostream.h>
  2. #include <stdlib.h>
  3. float pairetset();
  4. float bcletest();
  5. float Nbre;
  6. float pairetest()
  7. {
  8. Nbre=0.00;   //j'initialise tout à 0 mais je me demande si c utile...
  9. cout << "Entrez un nombre : ";
  10. cin >> Nbre;
  11. float paire;
  12. paire=0;
  13. paire = Nbre / 2 ;
  14. if (int(paire) == paire) //cherche si Nbre est divisible par 2
  15. {
  16. cout << "div par 2 \n pas premier\n\n";
  17. pairetest(); //on sait qu'il n'est pas premier donc je relance le prog pour rentrer un nouveau nbre.
  18. }
  19. if (int(paire)!=paire)  //avec else ça marchait pas bien...
  20. {
  21. cout<<"pas div par 2 \n";
  22. bcletest(); //s'il n'est pas div. par 2, alors je lance le test avec tous les autres diviseurs possibles.
  23. }
  24. cout<<"erreur, arret du programme\n";
  25. return 0;
  26. }
  27. float bcletest()
  28. {
  29. float Nbred;
  30. Nbred=0;
  31. int divisr;
  32. divisr=0;
  33. for(divisr=3; divisr<Nbre; divisr+=2)
  34. {
  35. cout<<"diviseur : "<<divisr<<"\n";  //juste pour voir le comportement du prog tant qu'in n'est pas fini
  36. cout<<"nbre divisé : "<<Nbred<<"\n";
  37. Nbred=Nbre/divisr;
  38.   if (int(Nbred)==Nbred)
  39.   {
  40.   cout<<"pas premier\n\n";
  41.   pairetest();
  42.   }
  43.   if (divisr>Nbred)
  44.   {
  45.   cout<<Nbre<<" est premier!\n\n\n";
  46.   int main();
  47.   }
  48. }
  49. }
  50. int main()
  51. {
  52. cout<<"\n----------\nCe programme permet de savoir si un nombre (entier!) est premier ou non\n----------\n\n" ;
  53. pairetest();
  54.       system("PAUSE" );
  55.       return 0;
  56. }


 
Bon d'accord il est construit d'une drôle de façon, mais avec l'habitude ça ira mieux!
 
Alors qu'est-ce qui pose problème?  :??:

Reply

Marsh Posté le 20-12-2005 à 17:23:03   

Reply

Marsh Posté le 20-12-2005 à 17:35:13    

jet-acide a écrit :


Alors qu'est-ce qui pose problème?  :??:


 
Tout le code entre la ligne 1. et la ligne 60. (pour les autres lignes, ça va).
 
Achète toi un bon bouquin genre Accelerated C++ de Koenig & Moo ou télécharge Thinking in C++ de Bruce Eckel.

Reply

Marsh Posté le 20-12-2005 à 18:05:29    

merci alerim de ta réponse rapide et directe... et ironique  xD (vaut mieux bien prendre cette 1ere réponse...)
 
Quelq'un n'aurait pas une réponse moins... "recommence tout T nul!"...?
 
//Pas la peine de répondre si c juste pour se foutre de moi!

Reply

Marsh Posté le 20-12-2005 à 18:08:42    

"télécharge Thinking in C++ de Bruce Eckel."
 
Pour commencer je préfère un bouquin en français

Reply

Marsh Posté le 20-12-2005 à 18:09:25    

Je me fous pas de toi, mais malheureusement c'est vrai, il n'y a pas une ligne de code qu'il faudrait pas complètement réécrire ! Ton truc ne compile pas, il y a des choses complètement inventées que tu n'as pu lire nul part et on ne programme pas en inventant, mais avec un vrai bon bouquin à côté de soit.
 
Dire ce qui ne va pas dans ton code ça serait te donner un cours complet tellement il y a de choses à dire. Donc le mieux c'est de te conseiller de lire un vrai bouquin sur le sujet, comme tous les vrais programmeurs l'ont fait un jour (et le font en permanence d'ailleur, un bouquin ça sert pas qu'aux débutants loin de là).

Reply

Marsh Posté le 20-12-2005 à 18:12:58    

jet-acide a écrit :

"télécharge Thinking in C++ de Bruce Eckel."
 
Pour commencer je préfère un bouquin en français


 
Je ne sais pas s'il a été traduit mais si t'es pas capable de lire de l'anglais technique, tu vas pas aller loin en info (et l'anglais technique en info est loin d'être difficile).
 
Maintenant si tu veux pas faire d'effort, c'est ton problème. [:spamafote]

Reply

Marsh Posté le 20-12-2005 à 18:18:56    

" il n'y a pas une ligne de code qu'il faudrait pas complètement réécrire ! Ton truc ne compile pas"
Je l'ai pourtant compilé et puis quand un nombre est divisible par 2 il marche tres bien...
Bon ok je n'insiste pas, je vais lire un bouquin complet, mais j'ai surtout besoin de bon exemples de programmes simples en C++
 
"te donner un cours complet" : si tu veux lol
 
STP dis-moi ce que j'ai "inventé" pour que je le refasse plus!

Reply

Marsh Posté le 20-12-2005 à 18:23:13    

Si tu cherches des exemples de programmes en C++ tu peux trouver pleins de codes sources sur le net. Encore faut-il trouver des trucs écrits correctement et ça c'est pas gagné... Donc le mieux c'est un bouquin.
 
Sinon Google : filetype:cc ou filetype:cpp pour trouver des codes sources en C++. :)

Reply

Marsh Posté le 20-12-2005 à 18:26:53    

[:pingouino] c'est quoi ce titre de topic ?
 
(et sinon, "le premier langage à apprendre est l'anglais" est une phrase incontournable sur ce forum)

Reply

Marsh Posté le 20-12-2005 à 18:30:30    

A première vue, alerim a raison, la première erreur est au niveau conceptuel: toute l'algorithmique est à refaire.
 
Exemple:

  • Pourquoi utilises tu des flottants? depuis quand un nombre premier peut-il être autre chose qu'un entier [:petrus dei]
  • Pourquoi un cas spécifique pour savoir si ton nombre est pair (pas de e)(en plus le test est franchement crade, il y a de bien meilleures manières de tester la parité), qu'a le nombre "2" de spécial à part le fait d'être le premier premier [:petrus dei]
  • Super l'incrémentation de la boucle de 2 à chaque tour, ça optimise grave, sauf que
Citation :

Premature optimisation is the root of all evil


Avant de te soucier d'optimiser, commence déjà par faire marcher ton truc.
 
Accessoirement, si t'es en C++ tu es censé inclure <iostream>, pas <iostream.h>


Message édité par masklinn le 20-12-2005 à 18:31:12

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 20-12-2005 à 18:30:30   

Reply

Marsh Posté le 20-12-2005 à 18:46:36    

Je me suis inspiré du même programme que j'avais fait en... TI Basic
(Le C++ sur ordi est plus rapide  qu'une calculatrice)
Sauf qu'il était nikel en TI Basic, mais dur à transcrire en C++ quand on y connait rien...
 
flottants : d'accord int est mieux mais c au cas ou qqn rentre 1 nombre à virgule : je veux pas que mon prog dise que 5.2 est premier bar ex...
 
<iostream.h> : include mis par défaut par mon compileur (devCpp)

Reply

Marsh Posté le 21-12-2005 à 09:17:35    

jet-acide a écrit :

Je me suis inspiré du même programme que j'avais fait en... TI Basic
(Le C++ sur ordi est plus rapide  qu'une calculatrice)
Sauf qu'il était nikel en TI Basic, mais dur à transcrire en C++ quand on y connait rien...
 
flottants : d'accord int est mieux mais c au cas ou qqn rentre 1 nombre à virgule : je veux pas que mon prog dise que 5.2 est premier bar ex...
 
<iostream.h> : include mis par défaut par mon compileur (devCpp)


 
traduire du code d'un langage à un autre n'est jamais quelque chose de conseillé. En général, la manière d'écrire peut varier assez fortement suivant ce que le langage te propose. Donc à la limite, si tu veux porter ton programme, reprends depuis le début. Tu sais ce qu'il fait, donc tu peux le refaire.
 
le problème pour ton nombre flottant, c'est aussi que l'utilisateur pourra rentrer une valeur qui fera entrer ton programme dan,s une boucle infinie au vu de sa construction actuelle (par exemple une valeur flottante représentant un nombre supérieur à 2^32+2)
 
ton compilateur ne te met pas ce genre de header par défaut. Il se peut, par contre, que ton IDE t'en mette, mais effectivement, <iostream.h> est un header obsolète depuis déjà un bon nombre d'années. On utilise <iostream> depuis longtemps, maintenant

Reply

Marsh Posté le 21-12-2005 à 10:25:51    

Bon j'ai fait cet algo à l'arrache sans compiler, il est largement optimisable, mais c'est une mailleure base non?
 
int verif_premier (unsigned int nb)
{
   int diviser;
   int trouve = 0;
   for (diviser = 2; diviser <= sqrt(nb,2), trouve == 0; diviser++)
  {
     if (nb%diviser == 0) //reste de la division = 0
     {
        trouve = 1;
     }
  }
  return (trouve == 0)
}
 
Retourne 1  si il est premier, 0 sinon...

Reply

Marsh Posté le 21-12-2005 à 10:33:30    

alors, sans prendre en compte la notion d'optimisation :
 
* si tu retournes une valeur genre 0 ou 1 -qui a clairement vocation d'être un booléen-, alors pourquoi utiliser un int ?
* le ++ devrait être préfixé sans même parler d'optimisation
* tu aimes faire des tours de boucle inutile ? au lieu de faire trouve = 1, retourne false directement

Reply

Marsh Posté le 21-12-2005 à 10:35:29    

Si on prend pas en compte la notion d'optiomisation, alors tes remarques n'ont pas lieu d'être. Le préfixage de ++ n'a aucune importance, et pour le reste, j'ai l'habitude de coder en C, et j'ai fait cet algo à l'arrache viteuf, comme précisé d'ailleurs. (en passant, en C les booléesn sont codés comme des int, alors à la rigueur c'est même mieux ^^, et je ne fais pas de tour de boucle en plus qu'avec ta méthode. Deux ou trois cafés de trop?)

Message cité 1 fois
Message édité par durkheim le 21-12-2005 à 10:37:39
Reply

Marsh Posté le 21-12-2005 à 10:40:34    

durkheim a écrit :

Si on prend pas en compte la notion d'optiomisation, alors tes remarques n'ont pas lieu d'être. Le préfixage de ++ n'a aucune importance, et pour le reste, j'ai l'habitude de coder en C, et j'ai fait cet algo à l'arrache viteuf, comme précisé d'ailleurs. (en passant, en C les booléesn sont codés comme des int, alors à la rigueur c'est même mieux ^^, et je ne fais pas de tour de boucle en plus qu'avec ta méthode. Deux ou trois cafés de trop?)


 
on fait pas de C ici, merci de sortir [:dawa]
et mes remarques que tu as l'air de considérer comme des optimisations sont simplement des remarques de bon sens. (Qui plus est, optimiser sans tenir compte du contexte d'utilisation, c'est assez moyen)
 
désolé pour ma remarque sur les tours en trop, effectivement, tu n'en fais pas, c'est juste la condition du for qui n'est pas vraiment naturelle [:pingouino]

Reply

Marsh Posté le 21-12-2005 à 10:43:43    

Ok, ok, remarques acceptées. Voila une nouvelle mouture, C++ compliant:
 
bool verif_premier (unsigned int nb)
{
   int diviser;
   int trouve = 0;
   for (diviser = 2; diviser <= sqrt(nb,2), trouve == 0; diviser++)
  {
     if (nb%diviser == 0) //reste de la division = 0
     {
        trouve = 1;
     }
  }
  return (trouve == 0);
}  
 
Bon, comme tu vas encore trouver à y redire, je te propose de poster une fonction similaire en améliorant celle ci, et je ferai de même. Au lieu de 4 posts inutiles, on aura ptêt un prog pour le posteur.

Reply

Marsh Posté le 21-12-2005 à 10:59:13    

bah, le posteur n'a pas l'air particulièrement intéressé par l'idée d'avoir une solution toute faite, non ? [:pingouino] apparamment, il fait ca pour prendre en main le langage
 
sinon, l'algo en lui-même, comme tu l'as prouvé dès ta première intervention, n'est pas d'une difficulté insurmontable si on veut juste quelque chose de "fonctionnel", donc bon ...

Reply

Marsh Posté le 21-12-2005 à 13:18:32    

tant qu'on y est a parler d'optimisation c'est ridicule de faire un sqrt() a chaque itération !!!!!! et çà mange certainement plus de cycles que le résultat temporraire inutile ;)
 
Ma petite version:

Code :
  1. bool isPrimeNumber (unsigned long nb)
  2. {
  3.    long diviser;
  4.    const long maxDiviser = (long) sqrt((double)nb); // include <math.h>
  5.    for (diviser = 2; diviser <= maxDiviser ; ++diviser)
  6.    {
  7.      if (nb%diviser == 0) //reste de la division = 0
  8.         return false;
  9.   }
  10.   return true;
  11. }


 
Après evidemment on peut optimiser, en effet les seuls diviseurs a tester sont les autres nombres premiers, du coup ton optim de n'utiliser que les impairs a partir de 3 marche pas mal.


Message édité par Malkav le 21-12-2005 à 13:25:19
Reply

Marsh Posté le 21-12-2005 à 13:22:02    

le int main() ligne 49 est horrible, fait une boucle dans ton main qui lit l'entrée et appelle la méthode de test, méthode qui renvoie un bool et qui n'affiche rien... c'est ds la boucle du main que tu vas faire l'affichage selon le résultat de la fonction
 
pour ton souci ds la boucle, as tu tracé au moins ? en mode debug tu devrais vite trouver le porblème ;)
(tu compiles avec koi ?)

Message cité 1 fois
Message édité par Malkav le 21-12-2005 à 13:23:39
Reply

Marsh Posté le 21-12-2005 à 14:15:23    

Malkav a écrit :

le int main() ligne 49 est horrible


 
 
c'est pas que c'est horrible, c'est surtout que ca déclare une fonction, la ligne est donc parfaitement inutile
 
ensuite, non, on ne s'occupe pas d'optimiser, justement [:pingouino]
si la fonction avait réellement besoin d'être optimisée, ca sous-entendrait qu'elle serait un point critique de l'application, donc qu'elle serait appelée souvent. Auquel cas on pourrait préférer stocker les différents nombres premiers qu'on a pu rencontrer afin de les réutiliser pour les calculs suivants, par exemple ... donc ce n'est pas de ca qu'on s'occupe ici

Reply

Marsh Posté le 21-12-2005 à 15:16:58    

Code :
  1. if (int(paire)!=paire)  //avec else ça marchait pas bien...


[:rofl]
 

  • quand une instruction, surtout si elle est élémentaire, donne des résultats aléatoires, alors ça vient du code, pas du langage.


  • on ne teste jamais deux nombres flottants avec == ou !=, à cause de l'imprécision des floats (lire des cours sur le sujet, c'est très important à savoir)


  • revoir le principe des casts

Reply

Marsh Posté le 21-12-2005 à 18:36:09    

Bon merci de vous interesser à mon prog, aussi pitoyable soit-il!
Je vais effectivement retenir vos conseils (ne teste jamais deux nombres flottants avec == ou !=...) et je vais me mettre sérieusement au C++ avec 1 bon bouquin (et les cours de l'IUT qu'on m'a passé)
 
Je n'ai utilisé que "Dev-C++ 4" (en anglais) -un vieux truc quoi! :D  
 
Je cherchais à faire ce prog : pour me faire au C++ déjà; mais aussi parce-que ce programme m'intéressait! (je veux dire que je voulais avoir un prog qui me permette de trouver des nombres premiers ou les facteurs premiers d'un nombre). C vrai qu'on peut en trouver sur le net, mais je voulais le faire moi-même.
 
Je trouve assez inutile de tester la division avec les nombres pairs ( càd 1 sur 2!!), car c'est une opération totalement inutile  quand on sait s'il est lui-m pair ou non!!!
//maintenant si c pas encore à ma portée de faire une boucle à incrémentation de 2... c 1 autre probl.
Cette optimisation (j'appelle même pas ça 1 optimisation...) est importante si le nombre entré est très grand. (d'autant plus que c'est la seule existante -mis à part faire une boucle la plus concise possible...)
De nombreux chercheurs planchent là dessus et l'algo le + puissant est basé sur ça / ils ont trouvé des trucs ms c plus de la prog (HS) et c trop compliqué!)
 
Enfin la boucle peut s'arrêter lorsque le diviseur == racine carrée du nombre entré.
???1? comment on fait les racines en C++ ???
???2? Je sais qu'on peut utiliser goto mais je sais pas comment on definit un label!  
???3? Quelle est la syntaxe exacte de la boucle for ? (je vois pas ce qui empêche d'incrémenter 2...)
 
--Merci--

Reply

Marsh Posté le 22-12-2005 à 10:10:48    

1 : std::sqrt pour la racine en C++, j'imagine (je n'ai pas vérifié)
 
2 : l'utilisation de goto est une mauvaise habitude que tu as pu avoir avec ta calculatrice, normalement, tu ne devrais en avoir besoin que dans de très rares cas. Sinon, la déclaration d'un label se fait de la manière suivante :
nom_label:
 
3 : for( intialisation ; condition ; incrémentation) instruction à répéter
donc oui, rien ne t'empêche d'incrémenter de 2 en 2, simplement, le fait de faire ca induit que tu es en train de chercher à optimiser et la remarque plus haut portait plutôt sur ce fait ... On ne cherche pas à optimiser un algo bancal :/
 
(Edit : AMHA, les chercheurs ne vont pas s'amuser à entrer un à un les nombres qu'ils soupçonnent être premiers, donc l'approche de ton programme est déjà contestable si c'est là sa vocation)


Message édité par theshockwave le 22-12-2005 à 10:12:57
Reply

Marsh Posté le 22-12-2005 à 15:15:52    

shockwave, quand on parle d'optimisation c'est pas juste en stockant un résultat de calcul, là c meme pas de l'optimisation c'est du bon sens, et une bonne habitude à prendre. on n'est pas obligé de faire expres de pondre du code lent qd meme.
 
jet-acide : tu as tout a fait raison, il est inutile de tester avec les nb pairs...
 
pour la racine carrée ben j'ai mis un exemple, lit le, sinon la méthode c'est

Code :
  1. double sqrt( double x )


dans math.h
 
Pour sortir d'une boucle pas de goto mais un break, mais pas la peine si tu peux retourner direct le résultat
 
sinon çà donne par exemple un truc du genre :

Code :
  1. bool isPrime(int nb)
  2. {
  3. bool prime = true;
  4. if (nb%2 != 0) // ou if (i&0x00000001) qui test juste le bit de poids faible
  5. {
  6. const int maxtest = (int) sqrt((double)nb);
  7. for (int i = 3 ; i < maxtest ; i+=2)
  8. {
  9.    if (nb%i == 0)
  10.   {
  11.      prime = false;
  12.      break;
  13.   }
  14. }
  15. }
  16. return prime;

Message cité 1 fois
Message édité par Malkav le 22-12-2005 à 15:17:21
Reply

Marsh Posté le 22-12-2005 à 15:44:21    

moi je vote, le C# c'est mieu.
 
et au moins, une abération du style :
int truc()
{
  return false;
}
 
au moins ça compile pas en C#... quand je vois ça dans un programme C/C++, j'ai envie de noyer son auteur :o

Message cité 1 fois
Message édité par Arjuna le 22-12-2005 à 15:44:45
Reply

Marsh Posté le 22-12-2005 à 15:58:01    

Arjuna a écrit :

au moins ça compile pas en C#... quand je vois ça dans un programme C/C++, j'ai envie de noyer son auteur :o


 
Euh, non, return false en C, ça n'existe pas. En C++ à la rigueur...  [:petrus75]

Reply

Marsh Posté le 22-12-2005 à 16:05:01    

Ouais, m'enfin le C me permettra quand même de faire un return 'e' alors que ma fonction est censée retourner un Int...

Reply

Marsh Posté le 22-12-2005 à 16:07:27    

oui, mais 'e' est une valeur entière, non ? [:petrus75]

Reply

Marsh Posté le 22-12-2005 à 16:10:22    

Arjuna a écrit :

Ouais, m'enfin le C me permettra quand même de faire un return 'e' alors que ma fonction est censée retourner un Int...


 
En C, 'e' est un int...

Reply

Marsh Posté le 22-12-2005 à 16:26:53    

c'est bien ça le problème :o

Reply

Marsh Posté le 22-12-2005 à 16:27:15    

Le C n'est pas typé. C'est qu'une surcharge bien pourrie de l'ASM en fait.

Reply

Marsh Posté le 22-12-2005 à 16:34:14    

En tout cas, en C# ça marche pas trop mal...
 

Code :
  1. private void button1_Click(object sender, System.EventArgs e)
  2.  {
  3.   Int64 nombre = 0;
  4.   try
  5.   {
  6.    nombre = System.Convert.ToInt64(textBox1.Text, 10);
  7.   }
  8.   catch
  9.   {
  10.    MessageBox.Show("Vas-y mon gars, tape un nombre entier, tu vas finir par y arriver" );
  11.   }
  12.   if (nombre != 0)
  13.   {
  14.    DateTime start = DateTime.Now;
  15.    string ret = zeCodeKiTue(nombre);
  16.    TimeSpan fin = DateTime.Now.Subtract(start);
  17.    MessageBox.Show(String.Format("{0}\nTrouvé en {1}", ret, fin.ToString()));
  18.   }
  19.  }
  20.  protected string zeCodeKiTue(Int64 nombre)
  21.  {
  22.   const string PREM = "Ton nombre est premier, c'est bien mon gars";
  23.   const string PASPREM = "Ton nombre est divisible par : {0} DTC";
  24.   Int64 nbMax = (Int64)Math.Sqrt((double)nombre);
  25.   if (nombre%2 == 0)
  26.   {
  27.    return String.Format(PASPREM, 2);
  28.   }
  29.   for (Int64 i = 3; i <= nbMax; i+=2)
  30.   {
  31.    if (nombre%i==0)
  32.     return String.Format(PASPREM, i.ToString());
  33.   }
  34.   return PREM;
  35.  }


 
1234567890123456817 => 44 secondes pour trouver que c'est un nombre premier sur un Pentium M 1.5 GHz :)

Reply

Marsh Posté le 22-12-2005 à 16:52:45    

C'est bien bête : "decimal" ne marche pas avec la fonction double Math.Sqrt(double a)
 
Parceque "1234567890123456817", c'est le nombre maximum de chiffres d'un entier 64 bits (j'aurais pu utiliser non signé, m'enfin ça n'aurait pas changé grand chose).
decimal aurait dû permettre d'utiliser des nombres avec au moins le double de chiffres :spamafote:
en tout cas, "1234567890123456817" dans un double (ou un float, ça revient au même) c'est marrant : y'a trop de chiffres et du coup ça dépasse sa précision. ainsi, 1234567890123456817%2 = 0 :D

Reply

Marsh Posté le 22-12-2005 à 17:41:54    

tu vas arrêter, avec ton C#, oui ? :o

Reply

Marsh Posté le 22-12-2005 à 17:50:21    

ben quoi ? c'est mieu, j'y peut rien :ange:

Reply

Marsh Posté le 22-12-2005 à 18:20:06    

je ne dirais pas mieux, loin de là [:pingouino]
 
certes, c'est pratique, mais c'est loin d'être adapté à tous les traitements :o
 
Edit : Et ... bordel, on est dans la cat C++ pour un mec qui apprend le C++, donc pas de C# ici


Message édité par theshockwave le 22-12-2005 à 18:20:49
Reply

Marsh Posté le 22-12-2005 à 18:38:27    

Malkav j'avais lu mais j'avais pas compris sqrt...
merci pour ton code. :)
 
Shockwave : le but des recherches (pas le mi1) est :  
 -Tu renrte une cléf publique (cryptographie) qui est : nombre=(nbre_premier1_128bits*nbre_premier2_128bits)
 -Ton prog miraculeux te trouve ces 2 multiplicateurs dont l'un est la cléf de décryptage
 -Tu décrypte le message sensé être "inviolable" (genre RSA).
Un algo en C/C++ ne peut pas trouver ça en moins de quelques années... (Avec les + gros cluster -non quantiques- du monde) !
Mais les nbres premiers m'ont tjr interessés.
 

Reply

Marsh Posté le 22-12-2005 à 19:03:58    

oui, donc tu n'entres pas les nombres premiers à la main ... tu fais un générateur de nombres premiers sur 128 bits, CQFD, tu es mal parti dans ce que tu veux faire, même si ca a pour but de te faire la main sur le langage
(et sinon, ne t'inquiète pas, j'ai fait un peu de crypto pendant mes cours :o )

Reply

Marsh Posté le 24-12-2005 à 16:08:38    

Malkav a écrit :

là c meme pas de l'optimisation c'est du bon sens


C'est extrèmement discutable, ça rend le code moins lisible en n'apportant peu ou prou rien en terme de vitesse de calcul.

Malkav a écrit :

une bonne habitude à prendre. on n'est pas obligé de faire expres de pondre du code lent qd meme


Non, utiliser des constructions rapides pourquoi pas, mais ce genre d'optimisations à la con, pas avant d'avoir fait tourner un profiler sur le code pour vérifier que ça fume vraiment les perfs, et (surtout) pas avant d'être sûr que l'algo actuel est le meilleur disponible et que les performances sont insuffisantes

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed