Dein Code hat etliche Probleme:
[list][*]int max; max = ... ; int array[max]; // Das ist kein C++, das geht nur mit g++, Benutze mal die Flags "-ansi -pedantic -Wall" mit dem g++[*] if (max == 0){break;} // Diese Stelle wird nie erreicht, falls (max == 0)[*] Das Array primzahlen wird nie initizialisert.[*] Ein Array mit a[j] = j oder a[j] = j + 1 oder a[j] = j - 1 ist meist relativ sinnlos, da der Inhalt ja schon im Index codiert ist.[*] Es scheint Dir nicht ganz klar was wann in primzahlen und in zahlen steht:[*]- zuerst initialisierts Du zahlen mit zahlen[j]= j + 1
- primzahlen vergisst Du, da steht nur Müll drin, aber wahrscheinlich soll es genauso aussehen.
- Dann überschreibst Du die Vielfachen der kleinsten Primzahl in primzahlen mit 0.
- Nun suchst Du die naechst höhere Primzahl. Der Vergleich (primzahlen[count] > end) legt die Vermutung nahe, das Du primzahlen wie zahlen initialisieren wolltest.
- Wieiter unten mach primzahlen[count] = zahlen[count]; keinen sinn, wenn primzahlen genauso initialisert sein soll wie zahlen[/list=1]
Ich hab mich mal an einer einfacheren Version probiert:
Code:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <iostream>
#include <vector>
int main()
{
// Benutzereingabe
int max;
std::cout << "Bitte angeben bis zu welcher Zahl Primzahlen errechnet werden sollen: ";
std::cin >> max;
std::cout << std::endl;
// Die Initialisierung
std::vector<bool> istPrim(max + 1, true);
istPrim[0] = false;
// Das Sieben
for (unsigned int i = 2; i <= istPrim.size(); i++) {
if (!istPrim[i]) continue;
for (unsigned int j = 2 * i; j <= istPrim.size() ; j += i)
istPrim[j] = false;
}
// Die Ausgabe
for (unsigned int i = 0, j = 1; i <= istPrim.size(); i++)
if (istPrim[i])
std::cout << j++ << ". " << i << std::endl;
return 0;
}
Lesezeichen