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

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [Help] Programme nbr premier en c#

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Help] Programme nbr premier en c#

n°1276888
pulsar07
Posté le 04-01-2006 à 14:53:12  profilanswer
 


Bonjour,  
 
Voila mon probleme, je cherche a afficher les nombres premiers a partir du nombre 10 en C# et je ne comprends pas ou est l'erreur dans mon programme pour que celui ci affiche certain nombre qui ne sont pas premier.
 
------------------------------------
using System;
 
class NombrePremier {
 
 static void Main(){
  int [] diviseurs = {2,3,5,7};
  int i = 10, j ;
 
   
  while ( i<= 2000){
   
   for(j =0; j<=3;j++){
    if (i % diviseurs[j] == 0) i++;
    else if ( j == 3){
     Console.WriteLine( i +" est premier" );
     i++;}
   }
  }
 }  
}  
---------------------------------------
 
Affichage :
 
 
11 est premier
13 est premier
16 est premier
17 est premier
19 est premier
22 est premier
23 est premier
26 est premier
29 est premier
31 est premier
34 est premier
36 est premier
37 est premier  
...
 

mood
Publicité
Posté le 04-01-2006 à 14:53:12  profilanswer
 

n°1276926
cesarr89
Posté le 04-01-2006 à 15:23:19  profilanswer
 

Code :
  1. using System;
  2. namespace NombrePremier
  3. {
  4. class MainClass
  5. {
  6.  public static void Main(string[] args)
  7.  {
  8.   int [] diviseurs = {2,3,5,7};
  9.      int i = 10, j ;
  10.    while(i<100){
  11.        for(j =0; j<=3;j++){
  12.      if(i%diviseurs[j] == 0){
  13.       break;
  14.      }
  15.      if(j==3){
  16.       Console.WriteLine(i + " est premier" );
  17.      }
  18.        }
  19.     i++;
  20.    }
  21.  }
  22. }
  23. }


 
ca fonctionne mieux je trouve...

n°1277382
pulsar07
Posté le 05-01-2006 à 00:27:15  profilanswer
 

merci ;)

n°1279498
_Mose_
Lonesome coder
Posté le 09-01-2006 à 12:12:37  profilanswer
 

Au risque de paraître chiant :
les break dans une boucle c'est mal.
 
Ca fonctionne, mais c'est une sale habitude : au niveau compréhension et lisibilité c'est vachement mieux de centraliser toutes tes conditions de sortie de ta boucle au début, plutôt que d'avoir systématiquement à relire toute la boucle pour comprendre.
 
Chui sur que ça va faire râler des gens ce que je dis là ("ouais tu fais chier, ca marche, on s'en branle" ), mais vous comprendrez quand vous aurez à relire le code de qqn de brouillon, ou à devoir comprendre 20 pages de codes en 10mn...

Code :
  1. while(i<100)
  2. {
  3. int j = 0;
  4. while((j <= 3)
  5.  && (i%diviseurs[j] != 0))
  6. {
  7.  if(j==3)
  8.  {
  9.   Console.WriteLine(i + " est premier" );
  10.  }
  11.  j++;
  12. }
  13. i++;
  14. }


---------------
Tout est normal, suffit de comprendre pourquoi.
n°1399167
neoprime19​88
Posté le 03-07-2006 à 09:43:52  profilanswer
 

Je suis désole, je viens de tester vos sources & elles ne fonctionnent pas. Le problème c'est que vous limité la recherche du nombre : vous supprimer seulement les nombre divisible par 2,3,5,7 or en faisant ça, vous n'obtenez pas que des premiers, car vous obtenez 121 & 11*11=121, vous obtenez également 377 & 29*13=377.
 
   ulong [] diviseurs = {2,3,5,7,11};  
   int z;
   ulong y = 1;
 
   for ( y=10000000001; y<= 10000001003 ; y=y+2) // valeur à modif
   {  
     
    for(z =0; z<=4;z++)
    {  
     if (y % diviseurs[z] == 0)
     {
      break;
     }
 
     if ( z == 4)
     {  
      double dRac = Math.Pow(y, 0.5);
      ulong uiEntree= ((ulong)dRac + 1);
      byte bVerif = 0;
      double dJ = (y / 2) + 1 ;
      richTextBox1.Text = "" ;
 
 
      if ((ulong)dRac == dRac)
      {
       richTextBox1.Text="Le Nombre : " +y +" N'est Pas Premier : " + dRac + " * " + dRac + " = " + y ;
      }
 
      else
      {
       for (ulong i=2; i<=uiEntree; i++)
       {
        for (ulong j=2; j<=(ulong)dJ; j++)
        {
         if ((i * j) == (y))
         {
          richTextBox1.Text="Le Nombre N'est Pas Premier : " +i +"*" +j +" = " +y;
          i = uiEntree;
          j = y;
          bVerif = 1;
         }
         if (i==uiEntree && j==(ulong)dJ && bVerif==0)
         {
          richTextBox1.Text="\n" +y; //  
          bVerif = 1;
          string sIn = richTextBox2.Text;
          richTextBox2.Text= sIn + richTextBox1.Text;
         }
        }
       }
      }
     }
    }
    y++;
   }
  }
 
Cette source que j'ai réalisé (en insérant la votre au dessus) trouve vraiment les nombres premiers. Le seul problème c'est que ça prend beaucoup de temps, mais vous êtes sur à 100% que le nombre soit premier, car le programme va rechercher 2 nombres pour former le soit disant premier.

n°1399354
_Mose_
Lonesome coder
Posté le 03-07-2006 à 12:25:58  profilanswer
 

Un des algo les plus rapides pour les nombres premiers : l'algorithme du 'crible d'Eratostène'

Code :
  1. /// <summary>
  2. /// Affichage du résultat
  3. /// </summary>
  4. public void AfficheNombresPremiers()
  5. {
  6. Console.WriteLine("== nombres premiers ===" );
  7. int []retour = this.CalculeNombresPremiers(1000);
  8. for(int i = 0; i < retour.Length; i++)
  9. {
  10.  if(retour[i] == 1)
  11.   Console.WriteLine(i);
  12. }
  13. }
  14. /// <summary>
  15. /// Calcule des nombres premiers jusuq'à la valeur max donnée
  16. /// </summary>
  17. /// <param name="max">L'algo calcul jusqu'à la valeur max donnée</param>
  18. public int []CalculeNombresPremiers(int max)
  19. {
  20. // initialisation
  21. int[] retour = new int[max];
  22. for(int i = 2; i < retour.Length; i++)
  23.  retour[i] = 1;
  24. // calcul
  25. for(int i = 2; i < retour.Length; i++)
  26. {
  27.  if(retour[i] == 1)
  28.  {
  29.   for(int j = i; i*j < retour.Length; j++)
  30.    retour[i*j] = 0;
  31.  }
  32. }
  33. return retour;
  34. }

n°1399366
jagstang
Pa Capona ಠ_ಠ
Posté le 03-07-2006 à 12:31:35  profilanswer
 

ne doit-on pas aller jusqu'à sqrt(max) ?
 
à lire http://en.wikipedia.org/wiki/Prime_number


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [Help] Programme nbr premier en c#

 

Sujets relatifs
Je recherche un programme bien spécifiqueProgramme possible or not possible ?
Petit programme en shellMémoire insuffisante Help
please help me :(HELP probleme pour un script d'export de zone DNS
[Help]Comment ouvrir un jeux 2 foisAvez-vous une idée pour ce programme ?
Avez-vous une idée pour ce programme ?triangle et variable globales... Help!!!
Plus de sujets relatifs à : [Help] Programme nbr premier en c#


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR