Suche nach composite numbers

Habe ich eine Reihe von Zufallszahlen. Die Reihe wird eigentlich bestimmt durch den Benutzer, sondern es werden bis zu 1000 zahlen. Sie befinden sich in:

vector<int> n

und die Werte eingefügt werden, wie diese:

srand(1);

for (i = 0; i < n; i++)
  v[i] = rand() % n;

Ich bin durch die Erstellung einer separaten Funktion zu finden, alle nicht-prime-Werte. Hier ist, was ich jetzt habe, aber ich weiß, es ist völlig falsch, wie bekomme ich prime und zusammengesetzte in der Serie.

void sieve(vector<int> v, int n)
{
  int i,j;

  for(i = 2; i <= n; i++)
     {
        cout << i << " % ";
        for(j = 0; j <= n; j++)
           {
              if(i % v[j] == 0)
                 cout << v[j] << endl;
           }
     }
}

Diese Methode in der Regel gearbeitet, wenn ich hatte gerade eine Reihe von zahlen von 0-1000, aber es scheint nicht zu funktionieren jetzt, wenn ich die zahlen nicht in Ordnung und Duplikate. Gibt es eine bessere Methode, um nicht-Primzahlen in einem Vektor? Ich bin in Versuchung, einfach erstellen Sie ein Vektor, füllen Sie es mit n zahlen und nur die nicht-Primzahlen, die Art und Weise, aber wäre das ineffizient?

Okay, da der Bereich von 0-1000 ich Frage mich, ob es einfacher, einfach erstellen Sie Vektor mit 0-n sortiert, und dann mit einem Sieb zu finden, die Primzahlen, ist dieser immer näher?

void sieve(vector<int> v, BST<int> t, int n)
{
  vector<int> v_nonPrime(n);
  int i,j;
  for(i = 2; i < n; i++)
      v_nonPrime[i] = i;

  for(i = 2; i < n; i++)
     {

        for(j = i + 1; j < n; j++)
           {
              if(v_nonPrime[i] % j == 0)
                 cout << v_nonPrime[i] << endl;
           }
     }
}
  • Ah, und es gibt eine schleichende Fehler drin. Sie sollten übergeben Sie den Vektor int als Referenz, sonst werden Sie nicht in der Lage sein, die Ergebnisse zu nutzen, die außerhalb des Siebes().
  • Auch Sie verwenden sollten, push_back und nicht v[i] = da der Vektor beginnt bei einer Größe von 0.
  • Ah, ich habe gerade gesehen, dass ich falsch verstanden, code: v wird nicht verwendet zum speichern der Ergebnisse, sondern um die Bereitstellung von input für die Methode. Immer noch eine Referenz speichert das programm vor dem kopieren v. size() Anzahl von Ganzzahlen, reservieren und freigeben.
  • nicht Primzahlen sind sogenannte composite-durch die Art und Weise
InformationsquelleAutor Doug | 2008-10-29
Schreibe einen Kommentar