Albert Einstein: ... la nostra conoscenza, se paragonata alla realta' e' primitiva e infantile. Eppure e' il bene piu' grande che possediamo.
... all our science, measured against reality, is primitive and childlike-and yet it is the most precious thing we have.
Informatica : Code snippets
Crivello di Eratostene
Il famoso algoritmo di Eratostene, detto 'crivello', implementato in C#. L'algoritmo ricava i numeri primi compresi tra 2 ed N, con N passato come parametro.
Linguaggio: C#
Parametri : rangeTop = I numeri primi compresi tra 2 e : questo parametro. Ritorna : Un int[] con i numeri primi ricavati : : ------------------------------------------------ : USA (es.:100) : : : int[] myNumeri = crivello(100); : -- myNumeri.Length = quanti numeri primi : -- myNumeri[j] il Jesimo numero primo ricavato : ------------------------------------------------ : : Nota: Il tutto puo' essere messo in una classe. :
private int[] crivello(int rangeTop) { // tutti i numeri da 0 a rangeTop+1 (non usiamo 0 e 1) // cosi' se voglio i numeri da 2 a 100, preparo un vettore // 0..100 di 101 elementi bool[] nums = new bool[rangeTop + 1]; // 0 e 1 non sono di utilita' int resCnt = nums.Length-2;
// li inizializzo come numeri primi for (int i = 0; i < nums.Length; i++) { nums[i] = true; }
// crivello in azione... // per ogni numero da 2 al max for (int cb = 2; (cb * cb) < nums.Length; cb++) { // se non e' un numero primo andiamo avanti if (! nums[cb] ) continue;
// moltiplico il numero in esame * 2,3,4..etc // il risultato e' un NON_PRIMO (in quanto e' divisibile per // il cb corrente) quindi viene messo a false (NON_PRIMO) for (int c = cb + cb; c < nums.Length; c += cb) {
if (nums[c]) { nums[c] = false; resCnt--; // uno di meno dei possibili numeri primi } }
}
// Nel vettore nums, sono rimasti a TRUE solo i numeri primi. // Generiamo un array (vettore) // in cui mettere solo i primi (true) // rimasti. // ----------------------------------------------- // Ritorniamo il vettore con i resCnt numeri primi // ----------------------------------------------- // int[] resBack = new int[resCnt]; int outPtr = 0; for (int i = 2; i < nums.Length; i++) { // se e' primo lo ritorno... if (nums[i]) { resBack[outPtr] = i; outPtr++; } }
return (resBack);
}
Scomposizione in fattori primi
Numeri primi
Argomenti correlati e altri percorsi:
Numeri primi Matematica, Elementi di aritmetica, numeri primi (locale-Formule)
Metti la scheda negli appuntiVisualizza appuntiAzzera appunti