Metoda naiwna
Najprostszy test pierwszości wygląda następująco: dla danej liczby n należy sprawdzić, czy dzieli się ona kolejno przez 2, 3, aż do n−1. Jeśli przez żadną z nich się nie dzieli, oznacza to, że jest pierwsza.
Zamiast testować wszystkie liczby do n−1, wystarczy sprawdzić podzielność n przez liczby mniejsze lub równe sqrt(n).
Kolejne udoskonalenie polega na sprawdzaniu podzielności n jedynie przez liczby pierwsze mniejsze lub równe sqrt(n). Ich listę łatwo możemy uzyskać metodą sita Eratostenesa. Metoda ta wciąż wymaga wykonania dużej liczby (sqrt(n)) dzieleń, co oznacza, że już dla 50-cyfrowych liczb pierwszych jest niewykonalna na współczesnych komputerach
K01:g ← [√n]
K02:Dla i = 2,3,...,g wykonuj krok K03
K03: Jeśli n % i = 0, to pisz NIE i zakończ
K04:Pisz TAK
K05:Zakończ
Schemat blokowy
Program w C++
#include<iostream>
#include<cstdlib>
#include<cmath>
using namespace std;
bool czy_pierwsza(int n)
{
if(n<2)
return false;
int g;
g=sqrt(n);
for(int i=2;i<=g;i++)
if(n%i==0)
return false;
return true;
}
int main()
{
int n;
cout<<"Podaj liczbe: ";
cin>>n;
if(czy_pierwsza(n))
cout<<"Liczba "<<n<<" jest pierwsza"<<endl;
else
cout<<"Liczba "<<n<<" nie jest pierwsza"<<endl;
return 0;
}
Rozwiązanie w Excel
W komórce E5 podajemy liczbę, której pierwszość chcemy zbadać.
Do komórki H5 należy wpisać formulę:
=JEŻELI(LUB(E5=2;E5=1);"Liczba pierwsza";JEŻELI(ORAZ(MOD(E5;WIERSZ(ADR.POŚR("2:"&ZAOKR.GÓRA(E5^0,5;0))))<>0);"Liczba pierwsza";"Liczba nie jest pierwsza"))
W komórce H5 pojawi się informacja czy liczba jest pierwsza.
Opracował: Maciej G.