/* Archivo: primo2.cpp
 * Autor: Nombre y Apellidos
 * Ultima modificacion: 1/10/2003
 * ------------------------------------------------
 * Este programa solicita un número entero y determina 
 si es un número primo.
*/


/* Zona de inclusiones */
#include <iostream>
using namespace std;


/* Zona de prototipos */
bool es_primo(int n);


/* Zona de definicion de la funcion principal (main) */
int main(void) {
   int n;

   cout << "Introduzca un numero entero positivo: " << endl;
   cin >> n;
   
   if (es_primo(n)) {
        cout << n << " es primo" << endl;
   } else { 
        cout << n << " no es primo" << endl;
   }
   
   system("pause");

}



/* Zona de definicion de funciones auxiliares */

/*
* Función: es_primo
* Uso:  b = es_primo(n);
* --------------------------------------------------
* Esta función determina si el número n es primo.
  Utiliza el hecho de que si n tiene un divisor 
  distinto de 1 y n, entonces n debe tener un divisor 
  menor o igual que la raiz cuadrada de n.
*/

bool es_primo(int n) {
   bool primo; int d;
   if (n==1 || (n%2==0 && n!=2)) {
      primo=false;
   } else {
      primo=true;
      d=3;
      while (primo && d*d<=n) {
         if (n%d==0) { 
           primo=false;
         } else {
           d+=2;
         }       
      }
   }
   return primo;
}





