Hallo, bin ganz neu hier, zumindest im Forum :)
Es geht um ein Skript, das eine Zahl darauf überprüft, ob es eine Primzahl ist.
Bislang sieht das bei mir so aus (nachdem man auf index.php im Formular die zu überprüfende Zahl eingegeben hat):
<?php
$zahl = $_REQUEST['zahl'];
if($zahl == "") {
print "Bitte eine Eingabe machen!";
}
elseif($zahl < 2) {
print "Nur Zahlen ab 2 eingeben!";
}
$count = 2;
while($count <= $zahl) {
$division = $zahl/$count;
$division2 = $division/2;
$division2round = round($division2);
if($division == 1) {
print "Die Zahl $zahl ist eine Primzahl!";
break;
}
elseif($division2round == $division2) {
print "Die Zahl $zahl ist keine Primzahl. Sie ist zum Beispiel durch $count teilbar.";
break;
}
$count++;
}
?>
Unabhängig davon prüft die if-Abfrage, ob $division == 1 und damit $zahl == $count ist. Hier liegt glaube ich auch der Ursprung meines Problems, zu dem ich noch komme. Falls $zahl == $count, bricht die while Schleife, die vorher eingesetzt hat und läuft, bis $count == $zahl ist, ab und man erhält die Nachricht, dass die eingangs gewählte Zahl eine Primzahl ist; $count erhöht sich natürlich bei jedem Durchlauf um 1.
Falls $count noch nicht $zahl ist, wird überprüft, ob $zahl glatt durch $count, das mit dem Wert 2 beginnt, teilbar ist (etwas umständlich, das gebe ich zu, bin aber PHP Neuling und das ist bis jetzt die einzige Methode, die mir dazu einfiel). Ist es der Fall, so ist $zahl logischerweise keine Primzahl, da sie durch eine Zahl != $zahl teilbar ist.
Nun zu meinem Problem. Gibt (relativ) große Zahlen ein, so hat diese Methode der Überprüfung den Nachteil, dass es sehr abhängig von den Nachkommastellen von $division ist. So behauptet das Skript beispielsweise, 99997 sei eine Primzahl, obwohl es keine ist (19 * 19 * 277). Teilt man also z.B. 99997 durch 99996 (wenn $count == 99996), dann ist für PHP $division == 1 und 99997 damit eine Primzahl.
Wie kann mal also mehr Nachkommastellen in die Berechnung mit einbeziehen, sodass man (zumindest im Rahmen bis 1000000) sicher Primzahlen festellen kann?