PHP :: Aufgabe #46

2 Lösungen Lösungen öffentlich

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.

Lösungen:

vote_ok
von bibir (1870 Punkte) - 03.09.2014 um 10:54 Uhr
Quellcode ausblenden PHP-Code
<?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>
vote_ok
von paddlboot (3970 Punkte) - 09.08.2019 um 09:32 Uhr
Quellcode ausblenden PHP-Code
<?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].', ';
}

?>
2105824

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.