Calcul de nombres premiers (nombres doubles --> 1.7e308)

Contenu du snippet

Voici un code pour calculer les nombres premiers. Je sais qu'il existe déja beacoup de code qui font cela mais celui ci traite avec des double, on peux donc calculer les nombres premiers jusqu'a la limite du double (~1.7E308).
Les nombres peuvent être inscrits dans un fichier texte.

Au lieu de la traditionelle formule if(nombre%x == 0) on a une variable temp qui est égale a nombre/x ensuite on teste si temp est entier par la formul
if(temp - floor(temp) == 0). Mais c'est un peu plus long.

Source / Exemple :


// Par coockiesch, 16.02.03
#include <iostream>
#include <windows.h>
#include <cmath>
#include <fstream>

using namespace std;

bool EstPremier(double nb);

int main()
{
  double max;
  char choix = 'n';

  cout<<"Jusqu'a quel nombre voulez-vous recherche des nombres premiers? "<<endl;
  cin>>max;
  cout<<"Voulez-vous generer un fichier (ca rendra le calcul plus long) (o/n)? ";
  cin>>choix;
  cout<<"---------------------------------------------------------------"<<endl;

  if(choix == 'o' || choix == 'O')
  {
    double retour = 1.0, temp;
    ofstream out("Nombres premiers.txt");
    if(!out)
    {
      cout<<"Impossible d'écrire dans le fichier\n";
      system("pause");
      cout<<"\n";
    }
    for(double i = 2;i < max; i++)
    {
      if(EstPremier(i))
      {
        cout<<i<<endl;
        out << i << " ";
        ++retour;
        temp = retour / 10;
        if(temp - floor(temp) == 0)
          out<< "\n";
      }
    }
    out.close();
    cout<<"Fichier ecrit"<<endl;
  }
  else
  {
    for(double i = 2;i < max; i++)
    {
      if(EstPremier(i))
      {
        cout<<i<<endl;
      }
    }
  }
  system("pause");
}

bool EstPremier(double nb)
{
  double temp;

  if(nb == 2)
    return true;

  temp = nb/2;
  if(temp - floor(temp) == 0)
    return false;

  double i = 3.0;
  while(i*i <= nb)
  {
    temp = nb / i;
    if(temp - floor(temp) == 0)
      return false;
    i++;
  }
  return true;
}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.