#pragma once

#include <math.h>
#include "gcd.hpp"

// Малая теорема Ферма: Если p - число простое и a - целое число, не делящееся на p, то при 
// возведении a в степень p - 1, наибольший общий делитель между результатом и p будет равен 1
// Но там есть ньюансы, называются обманщиками Ферма. По этому тесты нужно проводить на нескольких числах a.
// По этому если тестов много (у нас по уолчанию 1000) то вероятность того что появятся обманщики Ферам 1/2^1000
// Проверяет число на простоту
namespace alg
{
  inline bool is_prime(int a, int max_test = 1000)
  {
    // начинаем с 4 т.к. 2 и 3 простые числа
    for (int i = 4; i < max_test; ++i)
      if (gcd(std::pow(i, a - 1), a) == 1) return true;
    return false;
  }
}

