Gå til innhold

"Benchmarkprogram" Primefind - Store tall i C++


Anbefalte innlegg

Hei :p Veldig fersk på C++, men prøvde å lage et program som finne alle primtallene fra 0 til x, og printer ut dette til en tekstfil.

Funker fint sånn sett, men lurer på hvordan jeg kan regne på virkelig svære tall, som ikke double engang takler :\ :p

 

#include <iostream>
#include <fstream>
#include <time.h>

using namespace std;

double getinput(){
int a;
cout << "Find all prime numbers up to this number: ";
do{cin >> a; if(a <= 3){cout << "Give positive integer larger than 3... \n\n";}}while(a <= 3);

cout << endl;
return a;}

bool compute(double n){
 double a;
 unsigned long int b,d,e;

 e = int(n)%2;

 if(e==0 && e != n){return(false);}

 for(float c=3;c<n;c+=2){
		 a = (n/c);
		 b = int(a);

		 if(b==a){return(false);}}
		 return (true);}


class time {
  public:
  double clockcount;

  }start,stop;



int main()
{

ofstream file;
file.open("c:\\prime.txt", ios::trunc);
if(file.is_open()){
file << "2\n";
double n;
bool prime;
n = getinput();

start.clockcount = clock();

for(int a=3;a<n;a+=2){
prime = compute(a);
cout << a << ": ";
if (prime){ cout << "Prime!\n"; file << a << endl;}
else cout << "Not prime.\n";}}
stop.clockcount = clock();
cout << "\nIt took " << (stop.clockcount - start.clockcount)/CLOCKS_PER_SEC << " seconds.\n\n";
file << "\nIt took " << (stop.clockcount - start.clockcount)/CLOCKS_PER_SEC << " seconds.\n\n";
file.close();




system("PAUSE");
return EXIT_SUCCESS;
}

Lenke til kommentar
Videoannonse
Annonse

søk på codeproject.com, du vil finne flere klasser der som håndterer store tall. evt lag din egen, basert f.eks på ei lenka liste.

 

algoritmen din er forresten også en smule tung, du vil f.eks få kutta jobben i to dersom du kun sjekker på tall som er n/2, siden alle tall over vil vi resultat som er <2, men også dette blir tungt på store tall.

søk på prime sieve, dette er de mest effektive primtallsalgoritmene

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...