Informacje o nowych artykułach oraz akcjach edukacyjnych prosto na Twojej skrzynce e-mail!

Wyznaczanie liczb pierwszych – Sito Eratostenesa

Liczby pierwsze od dawna interesują matematyków oraz hakerów. Są one bowiem wykorzystywane do szyfrowania różnego rodzaju newralgicznych danych takich jak hasła czy numery karty kredytowych. Z nastaniem ery elektroniki ich znaczenie znacznie we współczesnej matematyce znacznie wzrosło. Liczba pierwsza jest liczbą naturalną większa o jedynki i mającą dokładnie dwa dzielniki: 1 oraz samą siebie. Do liczb pierwszych należą: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41… Jak widać nie ma żadnej zależności pomiędzy kolejnymi cyframi. Co więcej operując na coraz większych cyfrach będziemy znajdować coraz mniej liczb pierwszych.

Sito Eratostenesa

Lista kroków:

Krok 1:  Ustaw wszystkie elementy tablicy liczb na true

Krok 2: i ← 2;  

Krok 3: Jeśli i ≥ n, to idź do kroku 11;

Krok 4: w ← i + i;

Krok 5: Jeśli w > n, to idź do kroku 9;

Krok 6: Tablica[w] ← false;

Krok 7:  w ← w + i;

Krok 8:  Idź do kroku 5;

Krok 9:  i ← i + 1;

Krok 10: Idź do kroku 3;

Krok 11: i ← 2;

Krok 12: Jeśli i > n, to zakończ;

Krok 13: Jeśli T[i] = true, to pisz i;

Krok 14: i ← i + 1;            

Krok 15: Idź do kroku 12;

Pascal:

program sito eratostenesa;
const n = 100;
var
tablica : array[2..n] of boolean;
i, w : integer;
 
begin
  for i := 2 to n do tablica[i] := true;
 
  i := 1;
  repeat
    i := i + 1;
    w := 2 * i;
      repeat
        tablica[w] := false;
        w := w + i;
      until (w > n);
  until i > sqrt(n);
  for i := 2 to n do
  begin
    if (tablica[i]) then
    write(i, ' ');
  end;
end.

C#:

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = 0;
            Console.Write("Podaj liczbe: ");
            n = Convert.ToInt32(Console.ReadLine());
            bool[] tab = new bool[n+1];
            for (int i = 2; i * i <= n; i++)
            {
                if (tab[i] == true)
                {
                    continue;
                }
                for (int j = 2 * i; j <= n; j += i)
                {
                    tab[j] = true;
                }
            }
            Console.WriteLine("Liczby pierwsze z zakresu [0," + n + "]: ");
            for (int i = 2; i <= n; i++)
            {
                if (tab[i] == false)
                {
                    Console.Write(i + " ");
                }
            }
            Console.ReadKey();
        }
    }
}

C++:

#include <iostream>
 
using namespace std;
 
const int n = 100;
bool numbersTable[n + 1];
 
int main()
{
    for (int i = 2; i*i <= n; ++i )
    {
        if (numbersTable[i] == true)
            continue;
        for (int j = 2*i ; j <= n; j += i)
            numbersTable[j] = true;
    }
 
    cout << "Liczby pierwsze z przedziału od 2 do " << n << ":" << endl;
 
    for (int i = 2; i <= n; i++)
        if (numbersTable[i] == false)
            cout << i << endl;
    return 0;
}

Fot: Wikipedia.

Spodobało się?

Jeśli tak, to zarejestruj się do newslettera aby otrzymywać informacje nowych artykułach oraz akcjach edukacyjnych. Gwarantuję 100% satysfakcji i żadnego spamowania!

,

Dodaj komentarz

Odpowiedz

Twój adres e-mail nie zostanie opublikowany.

Pin It on Pinterest