wtorek, 14 marca 2017

Czy liczba jest pierwsza?

Algorytm sprawdzający czy liczba jest liczbą pierwszą?

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.

Optymalizacja
Zamiast testować wszystkie liczby do n−1, wystarczy sprawdzić podzielność n przez liczby mniejsze lub równe sqrt(n).

Lista kroków

Specyfikacja algorytmu
Wejście:
n –  liczba naturalna badana na pierwszość, n > 1

Wyjście:
TAK, jeśli n jest pierwsze lub NIE w przypadku przeciwnym.

Elementy pomocnicze:
g – granica sprawdzania podzielności p, g należy do N
i – kolejne podzielniki liczby n, i należy do N

K01         g ← [√n]
K02         Dla i = 2,3,...,g wykonuj krok K03
K03         Jeśli n % i = 0, to Wypisz "NIE" i zakończ
K04         Wypisz "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;
  int i;
  g=sqrt(n); // sqrt - pierwiastek kwadratowy 
  for (i=2;i<=g;i++)
    if (n%i==0)     return false; 
  return true;
}
int main()
{
  int n; // sprawdzana liczba
  cout<<"Podaj liczbe: ";
  cin>>n;

  if (czy_pierwsza(n)) //lub czy_pierwsza(n)==1
    cout<<"Liczba "<<n<<" jest pierwsza"<<endl;
  else
    cout<<"Liczba "<<n<<" nie jest pierwsza"<<endl;
  return 0;
}