Din pacate a trecut mai mult de o zi, insa revin cu restantele.
Ciurul lui Eratostene:
function eratostene($number) {
//construieste lista cu toate numerele
for ($i=1;$i<$number;$i++) {
$erat[$i]=1;
}
//elimina din lista multiplii fiecarui numar
for ($i=2;$i<$number;$i++) {
if ($erat[$i]) {
for ($j=2;$j*$i<$number;$j++) {
$erat[$i*$j]=0;
}
}
}
return $erat;
}
Algoritmul lui Atkin:
function atkin($number) {
//se construieste lista de numere, initializata cu valoarea 0
for ($i=1;$i<$number;$i++) {
$atkin[$i]=0;
}
//se adauga in lista diverse numere prime
for ($i=1;$i<sqrt($number);$i++) {
for ($j=1;$j<sqrt($number);$j++) {
$x=4*$i*$i+$j*$j;
if ($x<$number && ($x%12==1 || $x%12==5)) {
$atkin[$x]=1;
}
$x=3*$i*$i+$j*$j;
if ($x<$number && $x%12==7) {
$atkin[$x]=1;
}
$x=3*$i*$i-$j*$j;
if ($i>$j && $x<$number && $x%12==11) {
$atkin[$x]=1;
}
}
}
//se elimina din lista patratele perfecte
for ($i=5;$i<sqrt($number);$i++) {
$x=$i*$i;
$j=1;
while ($j*$x<$number) {
$atkin[$j*$x]=0;
$j++;
}
}
$atkin[2]=1;
$atkin[3]=1;
return $atkin;
}
Desi din literatura de specialitate (chiar si din citirea la prima vedere a algoritmilor) am inteles ca Atkin ar fi mai rapid, mie mi-a iesit exact invers. Dar probabil numerele nu au fost suficient de mari.
salut. succes in continuare dar nu inteleg de ce ai incetat sa mai publici.
RăspundețiȘtergereApropo, pentru cei interesati aici este un exemplu de afisare a numerelor prime cu ajutorul "Ciurului lui Eratostene" in limbajul Pascal https://sites.google.com/site/sursadeinspiratie/programare/probleme-programare
Nu am incetat, am mai putin timp.
RăspundețiȘtergereDar am un blog alternativ in care sunt mai activ: algorithmik.wordpress.com