Artykuły na każdy temat
[PHP] Sito Eratostenesa czyli algorytm do wyznaczania liczb pierwszych
<?php
$n = 100;
$table = array_fill(2, $n, '');
for($h = 2; ($h * $h) <= $n; ++$h)
{
for($i = (2 * $h); $i <= $n; $i += $h)
{
unset($table[$i]);
}
}
var_dump($table); // Klucze tablicy są liczbami pierwszymi
?>
Chyba tłumaczenie jest zbędne przy tak małej ilości linijek, prawda?
<?php
function is_prime_number($number)
{
// Tak dla niepoznaki
if($number < 2)
{
return false;
}
for($h = 2; $h < $number; ++$h)
{
if($number % $h == 0)
{
return false;
}
}
return true;
}
$n = 100;
$table = array_fill(2, $n, '');
echo 'Czy liczba pierwsza?<br>';
foreach($table as $key => $value)
{
echo $key.' - '.(is_prime_number($key) ? 'tak' : 'nie').'<br>';
}
echo '<hr>';
// lub dla pojedynczej pozycji
$try = 666;
echo $try.' - '.(is_prime_number($try) ? 'tak' : 'nie');
?>
Na upartego jeżeli mamy załadowaną odpowiednią bibliotekę (GMP) to możemy skorzystać z funkcji gmp_prob_prime().
Komentarze
Dodaj komentarz
Julian Pszczołowski
w linijce for($i = (2 * $h); $i <= $n; $i += $h)
zmienić $i = (2 * $h) na $i = ($h * $h);
oraz: jeśli $h jest już wymazane jako liczba złożona, to nie wymazujemy wielokrotności $h