C++ Prim zahlen anfänger sucht hilfe

walljumper

Neuling
Thread Starter
Mitglied seit
27.01.2005
Beiträge
491
Ort
Karlsruhe
Ich lerne seit ein paar Tagen mit hilfe eines Buches C++

Ich wollte jetzt auf eigene Faust ein Programm schreiben das Primzahlen sucht. Leider funktioniert es nicht und ich weis nicht warum.

Hier der code

#include <iostream.h>

void main()
{
long z = 5; // Zu Prüfende Zahl
long t = 1; // Teiler
long p; // maximal Primzahl
long i = 0; // Anzahl der Primzahlen
long x;


cout << "Geben sie ein bis zu welcher Zahl nach Primzahlen gesucht werden soll\n";

cin >> p;


while(z <= p)
{
while(1)
{
teiler:
t +=2;

x= z%t;
if(z = t)
{
cout << z << " Ist eine Primzahl\n\n";
i++;
goto zaehler;
}
else
if(x=0)
{
goto zaehler;
}
}
zaehler:
t = 1;
z +=2;
}
}


Was mich wundert ist das der code zu der Ausgabe
" 3 ist eine Primzahl" führt obwohl das doch garnicht sein kein da ich bei 5 anfange und immer 2 addiere.
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
nur mal so ne frage aber warum while(1) 1 heißt für mich true und damit müsste die schleife immer laufen und nie stoppen oder seh ich das falsch?
 
Ja aber durch die goto zaehler; Anweisung müsste die Schleife abrechen wenn z > p ist, oder?
 
hmm ich weiß nicht genau. Ich kann nur php und da gibts sowas wie goto nicht
 
:wall:
danke
naja primzahlen kommen immer noch nicht raus, aber immerhin weis ich jetzt warum 3 rauskam^^
 
if(x=0) ist noch eine zuweisung und liefert fast immer true.
also wieder if(x==0).
nimm mal die gotos raus, dann wird der code lesbarer
 
ja, lass goto weg. das sollte man eigentlich nicht verwenden. sowas gehört in assembler code. Denke das ist auch das Problem: zaehler wird jedes Mal ausgeführt, unabhängig, was davor passiert ist. Daher prüfst du nie alle ts durch für ein z.
Und nutze hier im Forum die code Umgebung.
 
Ich hab grad die 2.HTL hintermir und C und C++ gelernt und ein tipp lass das mit goto mein lehrer würde mich dafür killen wenn ich goto mache
 
wie bist du eigentlich auf goto gekommen?

ein gutes Buch würde dem nur 1 Satz würdigen und nicht mal zeigen wie das geht :rolleyes:

ich hab mal Assembler geproggt, da braucht man das, aber bei C/C++ haste nach ein paar hundert Zeilen Code und 20 Gotos die Schnauze voll :lol:
 
juhu es funktioniert

Code:
#include <iostream.h>

void main()
{
	long z = 5;    // ZU Prüfende Zahl
	long t = 1;    // Teiler
	long p;		// maximal Primzahl
	long i = 0;	// Anzahl der Primzahlen
	long x;	// Gleitkomma Prüfzahl
	

	cout << "Geben sie ein bis zu welcher Zahl nach Primzahlen gesucht werden soll\n";

	cin >> p;
	

	while(z <= p)
	{
		

		t +=2;
		if(t==z)
		{
			cout << z << " Ist eine Primzahl\n\n";
			i++;
			z += 2;
			t = 1;
		}
		else
		{
			x=z%t;

			if(x==0)
			{
				t = 1;
				z += 2;
			}
	
		}
		
	}
	cout << "Es wurden " << i+3 << " Primzahlengefunden";
}

bis zu 1mio gibt es 78499 primzahlen

Danke für eure Hilfe
 
Ein kleiner Tipp von mir, der zwar programmiertechnisch keinen Unterschied macht, den Algorithmus aber wesentlich beschleunigen sollte.

Statt auf t==z zu testen kannst du auf t>sqrt(z) testen, denn wenn du bis dahin keinen Teiler gefunden hast, wirst du auch keinen mehr finden.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh