/*
  primo(N)

  Predicado que comprueba si N es un número primo

  Argumentos
  + N:
    - Significado: número entero
    - Tipo: entrada


  Predicado relacionado
  primo_aux
*/



primo(2).
primo(N):- N > 2,
           primo_aux(N,2).


/*
  primo_aux(N,I)

  Predicado que comprueba si N divisible por I

  Argumentos
  + N:
    - Significado: número entero
    - Tipo: entrada

  Variable local
  + Raiz
    - Significado: número que representa la raíz cuadrada de N

  + Resto
    - Significado: número que representa el resto de la división entera de N entre I


  + I1
    - Significado: número entero

  Predicado relacionado
  primo

  Función relacionada
  sqrt
*/



primo_aux(N,I):- Raiz is sqrt(N),
                 I > Raiz.

primo_aux(N,I):- Raiz is sqrt(N),
                 I =< Raiz,
                 Resto is N mod I,
                 Resto \= 0,
                 I1 is I + 1,
                 primo_aux(N,I1).



