Vinzenz Mai: Weitere Nachkommastellen bei Berechnung nutzen

Beitrag lesen

Hallo

Hallo, bin ganz neu hier, zumindest im Forum :)

Du bist willkommen.

Es geht um ein Skript, das eine Zahl darauf überprüft, ob es eine Primzahl ist.

Du solltest auf Tom hören :-)

<?php
$zahl = $_REQUEST['zahl'];
if($zahl == "") {
    print "Bitte eine Eingabe machen!";
}
elseif($zahl < 2) {
    print "Nur Zahlen ab 2 eingeben!";
}

// Jede Zahl ist durch 1 teilbar :-)
// Teile durch Zahlen von 2

$count = 2;

// bis zur Zahl selbst

while($count <= $zahl) {

// Eine einleuchtende Optimierung:
// Du kannst bei der kleinsten ganzen Zahl aufhören, die größer ist
// als die Wurzel der Zahl, sonst hättest Du den kleineren Faktor bereits
// finden müssen.

$division = $zahl/$count;

// Du arbeitest mit ganzen Zahlen, bringst hier aber mit der Division
// Gleitpunktzahlen hinein

// Schau' Dir doch den Rest bei der Division an, d.h. benutze den
// [link:http://www.php.net/manual/de/language.operators.arithmetic.php@title=Modulo-Operator] und erspare Dir so die Ungenauigkeiten.

[...]

// War der Rest 0, dann gibt es einen Teiler -> und Du kannst aufhören
// Markiere, dass Du etwas gefunden hast (vor der Schleife bitte mit false
// initialisieren.
//         $found = true;

print "Die Zahl $zahl ist keine Primzahl. Sie ist zum Beispiel durch $count teilbar.";

break;
      }
      $count++;
  }

[...]
// Bist Du bis zur oberen Schranke gekommen (und
// $found ist immer noch false, dann

print "Die Zahl $zahl ist eine Primzahl!";

}
?>

  
Somit sparst Du Dir einige teure Divisionsoperationen je Schleifendurchlauf,  
der Timeout wird somit später erreicht und ...  
  

> Wie kann mal also mehr Nachkommastellen in die Berechnung mit einbeziehen, sodass man (zumindest im Rahmen bis 1000000) sicher Primzahlen festellen kann?  
  
... Nachkommastellen spielen keine Rolle mehr und können daher kein Problem mehr hervorrufen. Aber ich wiederhole nochmals:  
  
Du solltest auf [Tom](https://forum.selfhtml.org/?t=175674&m=1154859) hören und Dir das Sieb des Eratosthenes anschauen.  
  
Denke bitte daran, dass Du recht schnell die Grenzen der Integerzahlen erreichen kannst. Spätestens dann solltest Du zu den [Zahlen mit beliebiger Genauigkeit](http://www.php.net/manual/de/book.bc.php) übergehen. Sicherlich aus diesem Grund hat Tom [Dich gefragt](https://forum.selfhtml.org/?t=175674&m=1154864), was Du unter großen Zahlen verstehst.  
  
  
Freundliche Grüße  
  
Vinzenz