Sera que uso Dev ya que el programa no se detiene a mostrarme los numeros compila bien y todo,pero no me muestra nada de lo rapido que se sale
luis
luis
Cita de: avesudra en 6 Enero 2013, 20:20 PM
Así lo tengo yo y funciona(he cambiado las funciones por la que decía Blackzero):Código (cpp) [Seleccionar]#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
bool esPrimo(unsigned int num);
int int_cmp(const void *a, const void *b);//Función para pasarla a qsort
int main(int argc, char *argv[])
{
int *arrayDeNumeros= (int*) calloc(1000,sizeof(int*));
int lenArray = 0;
cout << "Ingrese una cadena de numeros terminada en 0:" << endl;
cin >> arrayDeNumeros[0];
for(register int i = 1; arrayDeNumeros[i-1]!=0 ; ++i)
{
cin>>arrayDeNumeros[i];
lenArray = i;
}
/** El algoritmo que viene a continuación lo que hace
* es ordenar el array arrayDeNumeros de menor a
* mayor,sinceramente,no sé como funciona solo que he
* leído que era rápido y lo he buscado.
*/
qsort(arrayDeNumeros,lenArray,4,int_cmp);
/**
* El siguiente bucle mira si los enteros que ya están
* ordenados son primos o no.
*/
cout << "Los primos son: ";
for(register int i = 1; arrayDeNumeros[i]!=0; ++i)
{
if(esPrimo(arrayDeNumeros[i]))
cout<<arrayDeNumeros[i]<<" ";
}
cin.sync();// Para ignorar los carácteres no leidos...(limpiar el buffer)
cout << endl<<endl<<"Presione una tecla para continuar . . .";
cin.get();// Utiliza esto que es portable.
return 0;
}
bool esPrimo(unsigned int num)
{
if(num>2 && (num%2==0))/* Si el número es mayor que 2 y es divisible por el entonces no es primo*/
return false;
/**
* Para comprobar si un número es primo se suele
* utilizar el siguiente algoritmo, que consiste
* en llegar hasta la raiz cuadrada del número de
* dos en dos y empezando en 3, ya que un número
* que no es par en la vida puede ser dividido por
* un par.
*/
unsigned int numSquare = (unsigned int)sqrt(num);
for(register unsigned int i =3; i<=numSquare ; i+=2)
{
if(num%i==0)
{
return false;
}
}
return true;
}
int int_cmp(const void *a, const void *b)
{
const int *ia = (const int *)a; // casting pointer types
const int *ib = (const int *)b;
return *ia - *ib;
/* integer comparison: returns negative if b > a
and positive if a > b */
}