Ver Mensaje Individual
Antiguo 16/12/2005, 18:06   #1
Snake12
Usuario Activo
 
Avatar de Snake12
 
Fecha de ingreso: 07/mar/2003
Mensajes: 118
Snake12 está en el buen camino
Ejercicio C++, Números de Hamming

Hola amigos, tengo un problema como de costumbre, tengo que hacer el siguiente problema:

Cita:
Realizar un programa en C++ para calcular los primeros 100 números de Hamming en orden creciente a partir de la formula:
H = 2p * 3q * 5r

En donde H representa a un número de Hamming y p, q y r son naturales. El número 1 es el primer número Hamming.

Para resolverlo se aconseja utilizar un bucle indefinido en el cual se van generando en orden los números naturales. Cada uno de ellos se factoriza y se comprueba si es múltiplo de 2, 3 o 5 únicamente, en cuyo caso se trata de un numero de Hamming, si el numero es múltiplo de cualquier otro valor (aunque también lo sea de 2, 3 o 5) no lo será.

Para factorizar un número se divide repetidamente por los números primos menores en orden exceptuando el 1 (2, 3, 5, 7, 11, etc) hasta que el resultado de una de las divisiones no de cero en ese momento se vuelve a repetir el proceso con el siguiente primo. El proceso se detiene cuando el valor a dividir es asimismo primo (o dicho de otra forma cuando al dividirlo por el primo correspondiente da de cociente 1). Los factores serán entonces los primos con los que al dividir el número ha dado algún resto cero.
Bueno, yo he hecho el ejercicio, pero creo que no está completo, es decir, yo he hecho la factorización, pero creo que me falta saber si el número es a su vez múltiplo de 2, 3 ó 5, pero no sé si ya está comprobado en el proceso anteiror, aunque creo que no. El ejercicio es este:

Cita:
int i,hamming,num, num_columnas;

cout << "Estos son los 100 primeros numeros de Hamming: " << "\n" << endl;

i = 1;
hamming = 0;
num_columnas = 0 ;
while ( hamming < 100 )
{
num = i;
while ( num % 2 == 0 )
{
num = num / 2;
}

while ( num % 3 == 0 )
{
num = num / 3;
}

while ( num % 5 == 0 )
{
num = num / 5;
}

if( num == 1 )
{
hamming++;
cout << i << ", ";

if(++num_columnas % 10 == 0)
cout << "\n" << endl;
}
i++;
}
cout << "\n" << endl;

system("Pause"); // Hacer una pausa
return 0; // Valor de retorno al S.O.
}
Bueno amigos, a ver si alguien me hecha una mano, porque la verdad, no sé si lo que obtengo son los números de Hamming o números cualesquiera.

Gracias y hasta luego!!!

Última edición por Snake12; 16/12/2005 a las 18:18.
Snake12 está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Publicidad: Conoce las ofertas de ANUNCIATE