Programme nbr premier en c# [Help] - C#/.NET managed - Programmation
Marsh Posté le 04-01-2006 à 15:23:19
Code :
|
ca fonctionne mieux je trouve...
Marsh Posté le 09-01-2006 à 12:12:37
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 :
|
Marsh Posté le 03-07-2006 à 09:43:52
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.
Marsh Posté le 03-07-2006 à 12:25:58
Un des algo les plus rapides pour les nombres premiers : l'algorithme du 'crible d'Eratostène'
Code :
|
Marsh Posté le 03-07-2006 à 12:31:35
ne doit-on pas aller jusqu'à sqrt(max) ?
à lire http://en.wikipedia.org/wiki/Prime_number
Marsh Posté le 04-01-2006 à 14:53:12
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
...