Advertisement
NelloRizzo

Crivello di Eratostene

Jan 7th, 2021
946
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.28 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6.  
  7. namespace WebApp.Servizi
  8. {
  9.     public class NumeriPrimiService
  10.     {
  11.         public List<int> GetNumeriPrimi(int limiteSuperiore)
  12.         {
  13.             var numbers = new List<int>();
  14.  
  15.             // crivello di Eratostene
  16.             // inizialmente faccio finta che tutti i numeri siano primi
  17.             // qui metto un true in corrispondenza di tutti i numeri da 0 al limite superiore
  18.             // assumo: indice dell'array = numero, valore true = primo
  19.             var primes = new BitArray(limiteSuperiore + 1, true);
  20.  
  21.             // ciclo sui numeri
  22.             for (var number = 2; number <= limiteSuperiore; ++number)
  23.             {
  24.                 // se incontro un primo
  25.                 if (primes[number])
  26.                     // "cancello" i multipli
  27.                     for (var index = number * 2; index <= limiteSuperiore; index += number)
  28.                         primes[index] = false;
  29.             }
  30.             // prendo i numeri che sono marcati come primi
  31.             for (var number = 2; number <= limiteSuperiore; ++number)
  32.                 if (primes[number]) numbers.Add(number);
  33.             return numbers;
  34.         }
  35.     }
  36. }
  37.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement