vineri, 26 octombrie 2012

Ciurul lui Eratostene si algoritmul Atkin

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.

2 comentarii:

  1. salut. succes in continuare dar nu inteleg de ce ai incetat sa mai publici.
    Apropo, 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

    RăspundețiȘtergere
  2. Nu am incetat, am mai putin timp.
    Dar am un blog alternativ in care sunt mai activ: algorithmik.wordpress.com

    RăspundețiȘtergere