Hamming y C++

SoutherComfort
17 de Diciembre del 2004
Alguien podría ayudar a este mega novato a hacer este ejercicio q no tengo ni idea de meterterle mano...
Realizar un programa en C++ (hamming.cpp) 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. En el caso de este problema se simplifica al ser 2, 3 y 5 los primeros números primos.

Usando sentecias while y for,nada dificil para el que sepa, pero yo es que estoy hecho un lío y tengo que entregar este ejercicio antes del jueves.

Gracias por vuestra ayuda

SoutherComfort
17 de Diciembre del 2004
NADIE? por fa aunque sea una pistita..

EsteEsLoMio
17 de Diciembre del 2004
Aquí te lo dejo.. para lo que necesites ay sabes pregunta

int main()
{
int i,hamming,num;
i=1;
hamming=0;

while (hamming < 100)
{
num = i;

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

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

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

if(num==1)
{
hamming++;
cout << i << endl;
}
i++;
}