Está en la página 1de 3

// Librer�as necesarias para el correcto funcionamiento del programa.

# include <iostream>
# include <ctime>
# include <cmath>
# include <iomanip>

// Buen candidato de n�mero a probar si es primo o no:


// n = 12789860177

using namespace std;

// Delcaramos las cabeceras de las funciones auxiliares que no forman


// parte de la funci�n principal.
bool EstudiaPrimo1 (long int numero);
bool EstudiaPrimo2 (long int numero);
bool EstudiaPrimo3 (long int numero);

int main ()
{
// Declaramos las variables necesarias.
long int numero;
int alg;
double t_i, t_f, tiempo;
bool esPrimo;

// Pedimos la informaci�n pertinente para rellenar dichas variables.


// Solicitamos al usuario que escoja qu� algoritmo quiere usar para
// comprobar la primalidad del n�mero a estudiar.
cout << "Introduzca su n�mero: ";
cin >> numero;
cout << endl;
cout << "**********************************" << endl;
cout << "*** 1) Algoritmo b�sico ***" << endl;
cout << "*** ***" << endl;
cout << "*** 2) Algoritmo intermedio ***" << endl;
cout << "*** ***" << endl;
cout << "*** 3) Algoritmo avanzado ***" << endl;
cout << "**********************************" << endl << endl;
cout << "Introduzca el algoritmo a usar: ";
cin >> alg;
cout << endl;

// Realizamos las operaciones necesarias.

// Se usa el algoritmo m�s b�sico.


if (alg == 1)
{
// Inicio cron�metro.
t_i = clock();

// Algoritmo 1.
esPrimo = EstudiaPrimo1(numero);

// Paro cron�metro.
t_f = clock();
}

// Se usa el algoritmo intermedio.


else if (alg == 2)
{
// Inicio cron�metro.
t_i = clock();

// Algoritmo 2.
esPrimo = EstudiaPrimo2(numero);

// Paro cron�metro.
t_f = clock();
}

// Se usa el algoritmo m�s avanzado.


else if (alg == 3)
{
// Inicio cron�metro.
t_i = clock();

// Algorimto 3.
esPrimo = EstudiaPrimo3(numero);

// Paro cron�metro.
t_f = clock();
}

// Se calcula el tiempo de ejecuci�n del algoritmo.


tiempo = (t_f - t_i)/ CLOCKS_PER_SEC;

// Muestro resultados por pantalla.

// Es primo o no.
if (esPrimo == true) cout << numero << " es primo." << endl;
else cout << numero << " no es primo." << endl;

// Tiempo de ejecuci�n.
cout << fixed << setprecision(10) << "Tiempo de ejecuci�n: " << tiempo << "
s." << endl;

return 0;
}

// Algoritmo 1: Se estudia la divisibilidad en el


// intervalo [2, numero/2).
bool EstudiaPrimo1 (long int numero)
{
long int i;
bool esPrimo;

esPrimo = true;
for (i=2; i<int(numero/2); i++)
{
if (numero % i == 0)
{
esPrimo = false;
}
}

return esPrimo;
}
// Algoritmo 2: Se estudia la divisibilidad en el
// intervalo [3, numero/2).
// S�lo se estudian divisores impares.
bool EstudiaPrimo2 (long int numero)
{
long int i;
bool esPrimo;

esPrimo = true;

// Se comprueba, previemente, si es divisible entre dos para descartar


// que sea un n�mero par. A excepci�n de 2, ning�n primo es par.
if ((numero % 2 == 0)&&(numero != 2)) esPrimo = false;

// Si no es par, se procede a estudiar su divisibilidad por los impares.


else
{
for (i=3; i<int(numero/2); i = i + 2)
{
if (numero % i == 0)
{
esPrimo = false;
break;
}
}
}

return esPrimo;
}

// Algoritmo 3: Se estudia la divisibilidad en el


// intervalo [3, raiz(numero)).
// S�lo se estudian divisores impares.
bool EstudiaPrimo3 (long int numero)
{
long int i;
bool esPrimo;

esPrimo = true;

//Se comprueba, previemente, si es divisible entre dos para descartar


// que sea un n�mero par. A excepci�n de 2, ning�n primo es par.
if ((numero % 2 == 0)&&(numero != 2)) esPrimo = false;

// Si no es par, se procede a estudiar su divisibilidad por los impares.


else
{
for (i=3; i<int(sqrt(numero)); i = i + 2)
{
if (numero % i == 0)
{
esPrimo = false;
break;
}
}
}

return esPrimo;
}

También podría gustarte