leifg
24-02-2002, 15:55
begeistert von c++ hab ich mich gestern hingeschrieben das alle primzahlen von 1 bis n bestimmen und anzeigen soll. aber es klappt nicht so wie ich es will. anstatt alle primzahlen auszugeben gibt es alle ungeraden zahlen aus (bei max=200 fehlt die 19 und bei max=150 bleibt es hängen).
noch kurz die erklärung wie es funktionieren soll: aufgebaut ist es auf dem sieb des eratosthenes. erst werden alle zahlen durch 2 geteilt. die zahlen die teilbar sind werden im array primzahlen mit 0 überschrieben. danach wird die nächstgrößere zahl im array primzahlen genommen und es werden alle zahlen im array durch diese geteilt und es geht wieder von vorne los. zum schluss müssten alle zahlen die nicht 0 sind primzahlen sein. hier der programmcode:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <iostream.h>
#include <stdlib.h>
int main()
{
int max;
cout << "Bitte angeben bis zu welcher Zahl Primzahlen errechnet werden sollen: ";
cin >> max;
cout << endl;
//max = 100;
int zahlen[max];
int primzahlen[max];
int j = 0;
int count;
//fills zahlen array with numbers from 1 to max
for (count = 0; count < max; count++)
{
if (max == 0)
{
break;
}
zahlen[count] = count + 1;
//cout << zahlen[i] <<endl;
}
j = 0;
int end = 2;
count = 0;
while (end <= max)
{
while (count <= max)
{
count++;
if (zahlen[count] % end == 0 && zahlen[count]!= end)
{
primzahlen[count] = 0;
}
//cout << primzahlen[count] <<endl;
}
for (count = 0; count <= max; count++)
{
if (primzahlen[count] > end)
{
end = primzahlen[count];
break;
}
}
}
count = 0;
int i = 1;
while (count <= max)
{
if (primzahlen[count] != 0)
{
primzahlen[count] = zahlen[count];
cout << i << ". " << primzahlen[count] <<endl;
i++;
}
count++;
}
return 0;
}
hoffentlich könnt ihr mir helfen
noch kurz die erklärung wie es funktionieren soll: aufgebaut ist es auf dem sieb des eratosthenes. erst werden alle zahlen durch 2 geteilt. die zahlen die teilbar sind werden im array primzahlen mit 0 überschrieben. danach wird die nächstgrößere zahl im array primzahlen genommen und es werden alle zahlen im array durch diese geteilt und es geht wieder von vorne los. zum schluss müssten alle zahlen die nicht 0 sind primzahlen sein. hier der programmcode:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <iostream.h>
#include <stdlib.h>
int main()
{
int max;
cout << "Bitte angeben bis zu welcher Zahl Primzahlen errechnet werden sollen: ";
cin >> max;
cout << endl;
//max = 100;
int zahlen[max];
int primzahlen[max];
int j = 0;
int count;
//fills zahlen array with numbers from 1 to max
for (count = 0; count < max; count++)
{
if (max == 0)
{
break;
}
zahlen[count] = count + 1;
//cout << zahlen[i] <<endl;
}
j = 0;
int end = 2;
count = 0;
while (end <= max)
{
while (count <= max)
{
count++;
if (zahlen[count] % end == 0 && zahlen[count]!= end)
{
primzahlen[count] = 0;
}
//cout << primzahlen[count] <<endl;
}
for (count = 0; count <= max; count++)
{
if (primzahlen[count] > end)
{
end = primzahlen[count];
break;
}
}
}
count = 0;
int i = 1;
while (count <= max)
{
if (primzahlen[count] != 0)
{
primzahlen[count] = zahlen[count];
cout << i << ". " << primzahlen[count] <<endl;
i++;
}
count++;
}
return 0;
}
hoffentlich könnt ihr mir helfen