Php Primzahlbestimmung?
Hey,
das wird fürs erste wahrscheinlich meine letzte frage zu php sein. Und zwar fehlt mir noch die Primzahlbestimmung. Ich hab es schonmal gefragt, jedoch hat es bisher noch nicht funktioniert.
<html>
<?php
$zahl1 = $_POST["zahl1"];
$zahl2 = $_POST["zahl2"];
$text = $_POST["text"];
$produkt = $zahl1*$zahl2;
$feld=array();
if($zahl1 < $zahl2) {
echo "Zahlen: $zahl1 und $zahl2 <br>";
for ($i=$zahl1; $i<=$zahl2;$i++)
{$feld[]=$i;}
foreach($feld as $zahl) {
if($zahl % 2 == 0) {
echo"<font color='red'>{$zahl}</font>";
}
else {
echo"<font color='blue'>{$zahl}</font>";
}
}
echo "<br> Produkt: $produkt <br> Zeichenkette: $text ";
echo strlen($text);
}
if($zahl2 < $zahl1) {
echo "Zahlen: $zahl2 und $zahl1 <br>";
for ($i=$zahl2; $i<=$zahl1;$i++)
{$feld[]=$i;}
foreach($feld as $zahl) {
if($zahl % 2 == 0) {
echo"<font color='red'>{$zahl}</font>";
}
else {
echo"<font color='blue'>{$zahl}</font>";
}
}
echo "<br> Produkt: $produkt <br> Zeichenkette: $text ";
echo strlen($text);
}
?>
</html>
Das ist mein code bisher und es funktioniert auch alles, bis auf die primzahlen. Wäre sehr nett
Deine Frage ist wie man Primzahlen berechnet?
Wie ich mit php eine primzahlbestimmung durchführe, um die obige aufgabe zu lösen
3 Antworten
Wenn du per PHP eine Primzahlbestimmen willst, dann musst du durch jede Zahl versuchen zu teilen. Jetzt kannst du einfachalber durch bestimmte Zahle schon vor untersuchen, z. B. 2 = keine gerade Zahl, 5 = keine mit 0 und 5. Wenn du hohe Zahlen wie 93429034872309482905743059283490 hast, dann ist das wichtig.
Das ganze machst du mit Modulo: https://www.w3schools.com/php/phptryit.asp?filename=tryphp_oper_modulus
Wenn die Zahlen nicht allzu groß werden, hinterlege einfach einfach eine Liste der Primzahlen und teste, ob sich die Zahl durch eine der hinterlegten Zahlen dividieren lässt. Das funktioniert dann nur bei Zahlen, die maximal so groß sind die höchste gespeicherte Primzahl zum Quadrat...
$prim = Array(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997);
$istprim = true;
$i = 0;
while(($prim[$i]<sqrt($zahl)) && ($i<count($prim))) {
if (($zahl % $prim{$i]) == 0) {
$istprim=false;
break;
}
$i++;
}
Wenn ich jetzt diesen array mit den primzahlen habe, wie kann ich testen, ob die zahl in dem array vorkommt?
Die idee find ich gut, aber das testen, ob sie sich dividieren lässt versteh ich nicht und funktioniert nicht
Naja, im Prinzip ja, aber die fangen da ja mit allen Zahlen an und entfernen dann in jedem Durchlauf die durch die aktuelle Zahl teilbare, das spart die Liste im Code, dauert aber länger.
So einen Test gegen die n kleinsten Primzahlen wird aber von vielen Programmen als schneller Vortest genutzt.
Eine Funktion, die eine Primzahl berechnet, findest du im Netz noch und nöcher.
https://www.php.de/forum/webentwicklung/php-einsteiger/php-tipps-2009/61489-primzahlen-script
Allgemeiner wohl als "Sieb des Eratosthenes" bekannt.