Der Schnellste Weg zu finden, alle Primzahlen unter 4 Mrd.

Ich versuche zu drucken jede Primzahl unter 2**32. Bis jetzt bin ich mit einem bool-Vektor zu bauen, die ein Sieb und dann drucken Sie die Primzahlen nach dem Sieb. Es dauert 4 Minuten, nur um drucken Sie die Primzahlen bis 1 Milliarde. Gibt es einen schnelleren Weg, dies zu tun?? Hier ist mein code

#include <iostream>
#include <cstdlib>
#include <vector>
#include <math.h>

using namespace std;

int main(int argc, char **argv){
  long long limit = atoll(argv[1]);
  //cin >> limit;
  long long sqrtlimit = sqrt(limit);

  vector<bool> sieve(limit+1, false);

  for(long long n = 4; n <= limit; n += 2)
    sieve[n] = true;

  for(long long n=3; n <= sqrtlimit; n = n+2){
    if(!sieve[n]){
      for(long long m = n*n; m<=limit; m=m+(2*n))
        sieve[m] = true;
    }
  }

  long long last;
  for(long long i=limit; i >= 0; i--){
    if(sieve[i] == false){
      last = i;
      break;
    }
  }
  cout << last << endl;

  for(long long i=2;i<=limit;i++)
  {
    if(!sieve[i])
      if(i != last)
        cout<<i<<",";
      else
        cout<<i;
  }
  cout<<endl;
  • Sollte Sie waaaaay mehr als 4 Minuten zum drucken der ersten Milliarde Primzahlen.
  • Ich denke, der Schnellste Weg wäre, zu überspringen, alle zahlen, die Sie wissen, arent prime, zum Beispiel, zahlen endend mit 2,4,5 (Nach 5), 6, 8, 0
  • Ich Stimme mit @Mysticial sollte es dauern viel länger als 4 Minuten (es sei denn, Sie haben ein super-computer).
  • Nein, was ich meinte war, alle Primzahlen unter 1 Milliarde sorry bearbeitet
  • wenn es dauert 4 min. für 1 Milliarden, dauert es 16 min. für 4 Milliarden Euro, und das ist nicht so schlimm im Vergleich zu der Wartezeit für eine Antwort auf SO. und sobald Sie berechnet haben Sie Sie nie brauchen, um zu berechnen, Sie wieder. heck nur bekommen aus dem web und mit ihm getan werden!
  • richtig, aber ich brauche, um die Ausgabe in weniger als 10 Sekunden. seine für einen Wettbewerb
  • Um die Speicheranforderungen zu senken, die Informationen über prime oder nicht prime wurde gespeichert für 30 ganze zahlen in jedem byte. Nur ein bit benötigt wird, zu speichern, prime oder nicht prime für eine ganze Zahl. Der Wert der integer ist bekannt durch den Standort des bit. In jeweils 30 zahlen, für N >= 1, die zahlen, die möglicherweise prime N*30+1, N*30+7, N*30+11, N*30+13, N*30+17, N*30+19, N*30+23, N*30+29 rsok.com/~jrm/printprimes.html
  • Ist es ein Wettbewerb, wer kann am besten die google-Suche? 😉
  • auch trennen sich Ihre Zeiten für die generation vs ausdrucken. es gibt nichts, was Sie tun können, zu drucken und können weder Ihre Mitbewerber. konzentrieren Sie sich nur auf die Zeit der Erstellung.
  • Wettbewerb ist das falsche Wort. seine Herausforderung online. nicht wirklich im Wettbewerb mit jedermann.
  • Wenn Sie diese Antwort in 10 Sekunden, dann wirst du über die Dinge der falsche Weg. Man kann Sie nicht berechnen, dass viele zahlen, die schnell. Was tun Sie wirklich brauchen, zu finden?
  • 10s für die Berechnung der Primzahlen ist nicht so weit Weg. Mit Rad-Faktorisierung ist es möglich, die Berechnung der Primzahlen bis zu einer Milliarde in den 20er Jahren, auf einer einzigen 1,83 GHz core in Java.
  • in der Regel der Weg zu gehen, ist ein segmentiertes Sieb mit Rad-Faktorisierung. die Antwort präsentiert eine offset-Sieb auf Quoten, etwas zu beginnen.

InformationsquelleAutor ordinary | 2013-09-21
Schreibe einen Kommentar