Risipa de key_press | Programare

Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Risipa de key_press | Programare - Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Calcularea tuturor numerelor prime

Un nou exercitiu: sa se gaseasca toate numerele prime pana la un numar dat. Implementarea in c#.
Pentru rezolvarea acestei probleme am folosit Sieve of Eratosthenes – cred ca in romana ii zice ciurul lui Eratosthenes, daca nu ma insel.
Nu am pretentia ca implementarea mea este cea mai eficienta, si astept sa fiu corectat, daca cineva are o versiune mai rapida/eficienta.

Codul e simplu, asa ca nu o sa mai postez comentarii aditionale. Am scris totul intr-o singura metoda, metoda care primeste un numar ca parametru, si returneaza un array de bool in forma [i] = bool, unde i este numarul, iar bool este valoarea de adevar a propozitiei i este prim.

        static bool[] PrintPrime(uint max)
        {
            bool[] allNo = new bool[max];
            for (int i = 0; i < allNo.Length; i++)
                allNo[i] = true;

            int start = 2;
            while (start < Math.Sqrt(allNo.Length)+1)
            {
                for (int i = 2 * start; i < allNo.Length; i += start)
                {
                    allNo[i] = false;
                }
                start++;
                while (start < allNo.Length && allNo[start] == false)
                    start++;
            }
            return allNo;
        }

O completare mica: am verificat, pe un OS 32 biti, si arrayul maxim pe care l-am putut initializa are 268435456 elemente. Peste aceasta valoare bool[] allNo = new bool[max]; arunca o erroare (outOfMemoryException).

Inchei rugand pe cei care citesc acest articol sa imi trimita ori implementari mai bune, ori traduceri ale acestui algoritm in alte limbaje. Insa fara bere, de data asta!

Category: Uncategorized

Your email address will not be published. Required fields are marked *

*