Wie wird eine Variable auf Prim überprüft?

Guten Tag,

ich soll ein Programm schreiben, das eine eingegebene Zahl darauf testet, ob sie eine Primzahl ist oder nicht. Das Programm läuft ganz gut, leider werden alle ungeraden Zahlen als Primzahl ausgegeben. Woran liegt das? Das Programm sieht wie folgt aus:

$x = $z;
$y = „“;
for ($y=2;$y$z ist keine Primzahl.";
break;
}
else;
echo "
$z ist eine Primzahl.";
break;
}

Vielen Dank im Voraus!

Hallo

$x = $z;
$y = „“;

Diese Zeile kannst du dir sparen

for ($y=2;$y$z ist keine Primzahl.";
break;
}
else;

Ein Else gefolgt von einem Semikolon bewirkt nichts und kann weggelassen werden.

echo "
$z ist eine Primzahl.";
break;
}

Wenn du eine ungerae Zahl nimmst, dann ergibt die erste Prüfung ($x%2 == 0) FALSE. Also wird der else-Zweig ausgeführt, da steht aber nur die leere Anweisung (das Semikolon) drin. Damit ist die if-then-else-Struktur abgearbeitet. Und dann kommt die Ausgabe ‚ist eine Primzahl‘ und ein break.

Und es hat natürlich keinen Sinn zu prüfen ob eine Zahl durch sich selbst teilbar ist, also $y
$prim = TRUE;
for ($y=2;$y

Gruß Johannes

danke :smile:

Ich bin es nochmal… Da ich absolut kein Experte bin, scheitere ich wohl schon an den kleinsten Dingen… Es geht wieder um Primzahlen. Ich soll alle Primzahlen wischen der 2 und einer eingegebenen Zahl in einem Array speicher und am Ende soll die größte mit laufender Nummer ausgegeben werden. Ich bin bereits so weit, dass alle Primzahlen zwischen 2 und der eingegebenen Zahl ausgegeben werden:

echo"
Folgende Primzahlen liegen zwischen 2 und $z:";
for ($i=3; $i

Hallo

Ersetze das

echo $i;

durch ein

$a[] = $i;

Damit speicherst du alle Primzahlen im Array $a, wenn es nicht existiert wird es automatisch angelegt.
Das letzte Array-Element erhältst du mit end($a) und die Anzahl der Elemente mit count($a).

Wenn du wirklich nur die letzte Primzahl haben willst, kannst du auch jede gefundene Primzahl in die gleiche Variable schreiben und somit alte Primzahlen überschreiben. In einer zweiten Variable kannst du mitzählen wie viele Primzahlen gefunden wurden.

Wenn du einen großen Zahlenbereich schnell testen willst lohnt vielleicht ein Blich auf diese Seite: http://de.wikipedia.org/wiki/Primzahltest

Gruß Johannes

OK, danke!
Aber jetzt wird die letzte Primzahl leider noch nicht ausgegeben :frowning:

Hallo

Wie ich schon geschrieben habe kannst du das zB mit end() und count() machen:

echo 'Primzahl Nummer ‚.count($a).‘: '.end($a);

Johannes

Das habe ich ja auch gemacht, aber leider werden mir alle Primzahlen ausgegeben und nicht nur die größte :frowning: Es tut mir wirklich Leid, dass ich mich so blöd anstelle, aber IT ist überhaupt nicht mein Ding…

Gruß Bensche

Es läuft jetzt… Hatte die Klammer falsch gesetzt! Danke!

Hmm, so ganz richtig läuft das Programm immer noch nicht…
Wenn ich die Klammern anders setze, wird mir beim Öffnen der Website erst ein Fehler angezeigt, deshalb habe ich sie wieder zurückgesetzt. Leider zeigt er mir jetzt immer noch jede Primzahl an und nicht nur die größte…

for ($i=2; $i

Das echo muss hinter die letzte Klammer.

Johannes

OK, das habe ich gemacht. Jetzt wird zwar nur die letzte Primzahl ausgegeben, also so wie gewollt, aber beim Aufrufen der Website wird in der Zeile dieser Ausgabe von Anfang ein Fehler angezeigt und dieser geht erst weg, wenn man eine Zahl >= 2 eingegeben hat :frowning:
Außerdem habe ich noch das Problem, dass die Zahl 1 auch als Primzahl ausgegeben wird. Allerdings ist die 1 per Definition keine Primzahl, da sie nur durch eine Zahl teilbar ist. Somit ist die 2 die kleinste Primzahl, würde ich sagen. Kann das irgendwie geändert werden?

Hallo

OK, das habe ich gemacht. Jetzt wird zwar nur die letzte
Primzahl ausgegeben, also so wie gewollt, aber beim Aufrufen
der Website wird in der Zeile dieser Ausgabe von Anfang ein
Fehler angezeigt und dieser geht erst weg, wenn man eine Zahl
>= 2 eingegeben hat :frowning:

Ok, das ist verständlich. Die letzte Primzahl ausgeben, wenn gar keine gefunden wurde führt zu Problemen. Ersetze

echo 'Primzahl Nummer '.count($primzahlen).': '.end($primzahlen);

durch

if (isset($primzahlen)) echo 'Primzahl Nummer '.count($primzahlen).': '.end($primzahlen);
else echo 'Keine Primzahl gefunden.';

Außerdem habe ich noch das Problem, dass die Zahl 1 auch als
Primzahl ausgegeben wird. Allerdings ist die 1 per Definition
keine Primzahl, da sie nur durch eine Zahl teilbar ist. Somit
ist die 2 die kleinste Primzahl, würde ich sagen. Kann das
irgendwie geändert werden?

Hmm. Hast du die äußere for-Schleife so abgeändert dass sie bei 1 anfängt? Dann würde oben genannter Fehler aber für die Zahl 1 nicht auftreten.
Kann ich gerade nicht nachvollziehen.

Gruß Johannes

Danke! Jetzt ist zumindest der Fehler weg. Ich werde einfach nochmal ein bisschen rumprobieren, ob das irgendwie geht, dass die 1 nicht als Primzahl ausgegeben wird.

Gruß Torben

Kannst du mir bitte mal in Worten erklären, welchen Zweck genau die Zeilen, die das $w enthalten, erfüllen?

for ($i=2; $i