PHP :: Aufgabe #46
2 Lösungen

Alle Primzahlen bis zu einem Maximalwert ermitteln
Anfänger - PHP
von devnull
- 26.02.2014 um 18:36 Uhr
Es soll ein Programm geschrieben werden, welches alle Primzahlen im Bereich von 2 bis zu einem Maximalwert sucht und auf der Konsole ausgibt.
Den Maximalwert soll der Benutzer beim Programmaufruf auf der Kommandozeile angeben können.
Der Algorithmus zur Primzahlensuche ist frei wählbar.
Den Maximalwert soll der Benutzer beim Programmaufruf auf der Kommandozeile angeben können.
Der Algorithmus zur Primzahlensuche ist frei wählbar.
Lösungen:

<?php if(isset($_POST['max'])){ $max = $_POST['max']; } else { $max = 0; } $ergebnis = array(); if($max >= 2){ $ergebnis[] = 2; // zahlen-array aufbauen; es sind nur noch ungerade werte zu ueberpruefen $kandidaten = array(); for($i = 3; $i <= $max; $i += 2){ $kandidaten[] = $i; } // auf einzelne zahlen testen for($i = 0; $i <= ($max-3)/2; $i++){ if($kandidaten[$i] != 'X'){ $ergebnis[] = $kandidaten[$i]; $temp = $kandidaten[$i]; // alle vielfache von $i ausradieren for($j = $i; $j <= ($max-3)/2; $j+=$temp){ $kandidaten[$j] = 'X'; } } } } function print_ergebnis($ergebnis){ $erg = ''; foreach($ergebnis as $key=>$val){ $erg .= '<br />'.$val; } return $erg; } ?> <!DOCTYPE html> <html> <head> <title>Primzahlen</title> </head> <body> <form action="./primzahlen.php" name="prim" method="POST"> <table> <tr> <td>Maximalwert: </td> <td><input type="text" name="max" size="2" value="<?php echo $max ?>"/></td> </tr> <tr> <td colspan="2"><input type="submit" value="berechnen" /></td> </tr> </table> </form> <p> Primzahlen: <?php echo print_ergebnis($ergebnis); ?> </p> </body> </html>

<?php //beliebigen Wert angeben $anzahl = 10; $zahlen = array(); //zahlen auf true setzen for($i = 2; $i <= 10000; $i++) { $zahlen[$i] = true; } //es soll geprüft werden, ob die Zahl true ist. Wenn ja, wird ab der darauffolgenden Zahl //geprüft, ob sie durch die aktuelle teilbar ist, um alle Vielfache von i wegzustreichen //Wenn die Zahl nicht true ist (kommt zum 1. mal bei i = 4 vor), soll mit der nächsten //weiter gemacht werden for ($i = 2; $i <= 10000; $i++) { if($zahlen[$i] == true) { for($j = $i+1; $j <= 10000; $j++) { if($j % $i == 0) { $zahlen[$j] = false; } } } else { continue; } } //schreibe alle keys der Zahlen, die true geblieben sind in einen Array $erg = array_keys($zahlen, true); //Ausgabe for($i = 0; $i < $anzahl; $i++) { echo $erg[$i].', '; } ?>