begin process at 2012 05 27 21:07:41
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Application

 > TROUVER LES NOMBRES PREMIERS INFÉRIEURS À UNE LIMITE DONNÉE

TROUVER LES NOMBRES PREMIERS INFÉRIEURS À UNE LIMITE DONNÉE


 Information sur la source

Note :
Aucune note
Catégorie :Application Classé sous :Nombre, Premier, Rapide, Limite, Fichier Niveau :Débutant Date de création :17/06/2011 Date de mise à jour :22/07/2011 22:30:57 Vu / téléchargé :2 928 / 82

Auteur : angrevol

Ecrire un message privé
Site perso
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Liste tout les nombres premiers inférieurs à la limite que l'utilisateur renseigne.
S'arrete si la limite est inférieure à 1 ou si elle n'est pas un nombre.
Pour plus de rapidité, le code ne vérifie que les nombre et diviseurs pairs.
Affiche le nombre d'itérations que chaque nombre à pris.
Enregistre les résultats dans un fichier (nombres_premiers.txt) créé dans le même répertoire que le programme.

Source

  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <math.h>
  • #include <windows.h>
  • int main()
  • {
  • FILE* fichier = NULL;
  • fichier = fopen("nombres_premiers.txt", "w+");
  • if (fichier == NULL)
  • {
  • printf("impossible d'ouvrir/initialiser le fichier.\n");
  • Sleep(100);
  • while(1)
  • {
  • if (GetKeyState(0x0D)<-1)
  • break;
  • Sleep(10);
  • }
  • return 0;
  • }
  • int nombre=3,test=2,limite=0,premier=1,compteur=0;
  • printf("Veuillez entrer une limite : ");
  • scanf("%d",&limite);
  • if (limite>=2)
  • printf("2 ce nombre a pris 0 iterations.\n",nombre,compteur);
  • if (limite<=0)
  • {
  • printf("je demandais un chiffre hein... ? et plus grand que 0 ^^'\n");
  • Sleep(100);
  • while(1)
  • {
  • if (GetKeyState(0x0D)<-1)
  • break;
  • Sleep(10);
  • }
  • fclose(fichier);
  • return 0;
  • }
  • for(nombre=3;nombre<=limite;nombre+=2)
  • {
  • for(test=3,compteur=1;test<=(sqrt(nombre)) && premier;test+=2,compteur+=1)
  • {
  • premier=(nombre%test!=0);
  • }
  • if (premier)
  • {
  • printf("%d ce nombre a pris %d iterations.\n",nombre,compteur);
  • fprintf(fichier,"%d ce nombre a pris %d iterations.\n",nombre,compteur);
  • }
  • premier=1;
  • }
  • printf("\n");
  • Sleep(100);
  • while(1)
  • {
  • if (GetKeyState(0x0D)<-1)
  • break;
  • Sleep(10);
  • }
  • fclose(fichier);
  • return 0;
  • }
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>

int main()
{
    FILE* fichier = NULL;
    fichier = fopen("nombres_premiers.txt", "w+");

    if (fichier == NULL)
    {
        printf("impossible d'ouvrir/initialiser le fichier.\n");

        Sleep(100);
        while(1)
        {
            if (GetKeyState(0x0D)<-1)
                break;
            Sleep(10);
        }

        return 0;
    }
    int nombre=3,test=2,limite=0,premier=1,compteur=0;

    printf("Veuillez entrer une limite : ");
    scanf("%d",&limite);
    if (limite>=2)
        printf("2 ce nombre a pris 0 iterations.\n",nombre,compteur);

    if (limite<=0)
    {
        printf("je demandais un chiffre hein... ? et plus grand que 0 ^^'\n");

        Sleep(100);
        while(1)
        {
            if (GetKeyState(0x0D)<-1)
                break;
            Sleep(10);
        }

        fclose(fichier);
        return 0;
    }

    for(nombre=3;nombre<=limite;nombre+=2)
    {
        for(test=3,compteur=1;test<=(sqrt(nombre)) && premier;test+=2,compteur+=1)
        {
            premier=(nombre%test!=0);
        }

        if (premier)
        {
            printf("%d ce nombre a pris %d iterations.\n",nombre,compteur);
            fprintf(fichier,"%d ce nombre a pris %d iterations.\n",nombre,compteur);
        }

        premier=1;
    }
    printf("\n");

    Sleep(100);
    while(1)
    {
        if (GetKeyState(0x0D)<-1)
            break;
        Sleep(10);
    }

    fclose(fichier);
    return 0;
}


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • main.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 610 octets
  • nb_pr.cbpTélécharger ce fichier [Réservé aux membres club]1 054 octets
  • nb_pr.ex_Télécharger ce fichier [Réservé aux membres club]29 644 octets

Télécharger le zip


 Historique

17 juin 2011 20:11:21 :
oubli de l'exception du 2
17 juin 2011 21:57:41 :
Rapidité hautement augmentée en utilisant la racine de nombre au lieu de nombre/2
17 juin 2011 21:59:18 :
zip à jour
17 juin 2011 22:03:06 :
erreur dans le zip à jour (corrigé)
22 juillet 2011 22:30:57 :
Bug corrigé

 Sources de la même categorie

Source avec Zip Source avec une capture PROGRAMME DE SUDOKU par AffreuxJojp
Source avec Zip EVALUATEUR D'EXPRESSION ARITHMÉTIQUE par matrx180vTitanium
Source avec Zip Source avec une capture QBIBLIO GESTION DES PRÊTS par conatic
Source avec Zip Source avec une capture QL-CHATROOM V 1.0 par mature
Source avec Zip Source avec une capture GEOLOCALISATION par ganjarasta

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GENERE BMP par lajouad
Source avec une capture FACTORISATION D'UN ENTIER EN PRODUIT DE NOMBRES PREMIERS AVE... par darkor
Source avec Zip UN MICROSCOPE NUMÉRIQUE POUR REGARDER LES NOMBRES DANS TOUTE... par euclidoscope
Source avec Zip Source avec une capture SPIRALE D'ULAM (WIN32) par vecchio56
Source avec Zip NOMBRES PREMIERS AVEC CHRONO ET INCREMENTEUR INCORPORÉ par sebman

Commentaires et avis

Commentaire de pgl10 le 18/06/2011 07:46:59

C'est bien. Après 2 et 3 tous les nombres premiers sont de la forme 6k-1 ou 6k+1, cela permet d'éviter d'essayer les multiples de 2 et 3. On peut aussi éviter les multiples de 2, 3 et 5. Voir http://www.cppfrance.com/code.aspx?ID=52531. Mais pour aller encore plus vite il faut utiliser un tableau auxiliaire comme à http://www.cppfrance.com/code.aspx?ID=52234. Pour ceux qui veulent faire le calcul rapidement.

Commentaire de Kevin95870 le 20/06/2011 14:31:20

Il serait bien de penser a fermer les fichier ouverts quand on sort du programme. par exemple dans le cas d'erreur :
if (limite<1)
{
    printf("je demandais un chiffre hein... ? et plus grand que 0 ^^'\n");
    system("pause");
    return 0;
}

on pourrait mettre un petit fclose().

Commentaire de pgl10 le 21/06/2011 23:39:43

Pour afficher les nombres premiers inférieurs à 1000 :
#include <stdio.h>
#include <conio.h>
main(x,y) {printf("2\n");for(;x++&&x<1000;)
for(y=2;x%y;)++y/x&&printf("%d\n",x);getch();}

Commentaire de takisho le 30/07/2011 17:19:36

salut les amis
je suis un debutant en programmation ,j'ai ecrit un programme qui fait la meme chose mais d'un code source plus simple et je veux connaitre à quoi sert l'expression GetKeyState(0x0D)<-1 il me semble inutile
voici mon code source

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

double reinit(double* point);//la fonction qui reinitiale m à la fin de la 1e boucle

int main(int argc,char*argv[])
{
double n=47.0,p=1.0,i=0, m=2.0;/*meme si on a pas declaré m à l'interieur de la 1e boucle(va voir dietamain dans le dossier calculateur de nombre primaire) m est reinitialé
   à 2 a la fin  la 1e boucle à l'aide de la fonction reinit qui prend
   comme paramaitre un pointeur(ces pointeur sont vraiment utile)je crois que l'utilisation de la fonct reinit et mieux car au lieu de declarer et reinitialer
   m chaque fois de nouveau (ce qui prendre plus de temps) on fais just la reinitialisation de m*/

                               //pour que la 2e boucle commence a marche  il faut que m=2 car si m=1 la 1e condition de la 2e boucle ne sera pas verifiée(eh oui)
double *pnt=NULL;
pnt=&m;


/*boucle 0*/ // cette boucle est toujours à marche car la condition est toujors vrai (1=vrai et 0=faux)
{
printf("entrer un nombre : ");
scanf("%lf",&n);


/*1e boucle*/ while(n-i>1)//1e boucle
{
// double m=2; c'est ici qu'on a declaré m dans la version precedante

/*2e boucle*/ while((n-i)/m != floor((n-i)/m) && m<=(n-i))/*la 1e condetion est pour verifier que n-i n'est devisible par aucun nombre
on sait que n-i ne peut etre devisible que par un nombre inferieur à lui alors on a ajouté la 2e condetion(il ne faut pas etre un génie en math pour comprendre ça,non?heheheheh)*/

{
m++;
}

if(m==(n-i))// si a la fin de la 2e boucle m=n-i c'est a dire que tout les valeurs de m < à n-i ont pas pu devisés n-i alors n-i est primaire

/*Rmq:pourquoi m=n-i et pas m=n-i+2 quand sa valeur initiale est 2?la repense c'est qu'on incrimente m que n-i-2 fois un exemple est mieux que mille explications
on prend n-i=7 on a(7/2==>m+1=3, 7/3==>m+1=4, 7/4==>m+1=5, 7/5==>m+1=6, 7/6==>m+1=7) donc à la fin m=7=n-i*/
{
printf("le %3.0fe nombre primaire est %6.0f\n",p,n-i);
p++;
}
reinit(pnt);

i++;
}
}






system("pause");
return 0;
}
double reinit(double *pnt1)
{
return*pnt1=2;
}


Commentaire de angrevol le 06/08/2011 21:24:20

ça vérifie si la touche entrée est appuyée.
juste pour éviter le message de la commande dos "pause"
Après ça revient au même de faire :
while(1)
    {
        if (GetKeyState(0x0D)<-1)
            break;
        Sleep(10);
    }


et

system("pause);

Chacun son truc ^^

Commentaire de takisho le 10/08/2011 17:23:30

Hi ANGREVOL
peut-tu m'expliquer de plus le fonctionement de
while(1)
    {
        if (GetKeyState(0x0D)<-1)
            break;
        Sleep(10);
    }
j'ai remplacer system("pause"); par cette boucle mais ce n'est pas la meme chose ,et pourquoi des fois tu ecrit Sleep(10) et d'autres fois Sleep(100)?

j'ai remarqué aussi que ton programme fait les claculs plus vite que le mien mais quand je supprime ces boucles leurs rapidité(je veux dire par rapidité que ton programme prend moins du temps que le mien pour trouve les nombre premiers à partire du meme limite)  deviennent presque la meme y a t'il une relation entre la rapidité du programme et ces boucles?

merci d'avance et pardonne moi pour le dérangement je suis un grand debutant

Commentaire de angrevol le 13/08/2011 03:56:49

Normalement non, il n'y a pas de rapport entre les boucles et la rapidité du calcul des nombres.
la fonction "Sleep(temps_en_ms)" donne l'ordre au programme d'attendre x millisecondes avant d'exécuter la suite

Pour la fonction "GetKeyState(__in  int nVirtKey)" Je te conseille ce lien http://tcharles.developpez.com/simul/

Sinon pour faire simple cette boucle s'exécute tant que l'utilisateur n'appuie pas sur la touche Entrée.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Compter les lignes d un fichier texte [ par DeepThroat ] Bonjour a tous !J'aimerai trouver une fontion simple qui retourne le nombre de lignes dans un fichier , ou bien qui affiche ce nombre de lignes.j'imag nombre de caractère [ par mig73 ] salut à tousje suis sous visual c++.netj'ai utilisé la fonction suivante:CFile::GetLenght qui me donne la taille en octet du fichier que je lisA parti connaitre nombre de fichier dans un dossier [ par Gedeon31 ] pour mon appli c++ je cherche a savoir le nombre de fichier present dans un dossier sachant que je connait son chemin, kk1 connai t il un moyen de le nombre premier [ par djkill55 ] bonjour, je doi faire un programe ki verife si le nb ke je rentre est premier ou pa a l aide de fonction et je n ai ocune idee cmt faire...aidez moi s Extraire des donnees d'un fichier txt ... ??? [ par kvndevils ] Voila Mon fichier txt se presentre de la maniere suivante :10 124 TOTO6 TITI-1OTOTTIIT&lt;FIN DE FICHIER&gt;les 2 premier int designent les valeurs de pb recuperer nombre de lignes [ par sergio18 ] Bonjourje fais une classe ou je recupere le contenu d'un fichier texte lignes par lignes. Pour cela,j'utilise la fonction fgets et vu qu'elle ne retou Crypter un nombre ds un fichier [ par ryukengouki ] Est ce que qqun pourrait me dire comment, de façon "SIMPLE", crypter mais aussi décrypter un nombre que j'enregistre dans un fichier...le but de cette [newbie] crée un fichier .h en C [ par CHKDSK2K ] Bonjour à tous, Je crée un fichier en c qui permet de verrifier si ce que l'on entre est bien un chiffre, mais je voudrais mettre se code dans les pro a l'aide (rapide) [ par alphaone ] j'ai une function qui remplace dans une chaine de caractere un mot par un autre.je voudrai, que quelqu'un qui me donne un script, qui ouvre un fichier Extraire une série de nombre d'un fichier txt [ par geag17 ] Je souhaite remplir un tableau de valeur avec des donn&#233;s qui sont dans un fichier .txt afin de pouvoir les traiter.Auriez vous une solution facil


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales