Tal vez no sea la solución mas rápida pero ira mejorando:
..............................................
Seria interesante que publiquen los códigos con los cuales resuelven el problema
No dudo que lo podamos mejorar, aunque a bote pronto no veo por donde.
Respecto a lo de publicar código siento haber puesto la otra noche la solución sin el mismo pero los habituales del foro creo que me comprenderán.
Se debe a que en estos últimos tiempos cuando cuelgo código en el foro o me lo borran directamente o sencillamente bloquean el tema y esto último me hubiera dolido ya que habría afectado a todos los seguidores del tema por mi culpa. Y es que me zumban todavía en mis oídos unas palabras de engel lex: "León para que pones código si sabes que te lo van a borrar".
Pero en vista de que, por ahora al menos, eso no ha pasado, paso a poner mi código que básicamente es similar al ya expuesto sólo que no hago uso de función, más que nada para no tener que estar llamando a la misma tropecientas veces y esperando su respuesta, y que es más "cortito", está compactado como simple ejercicio. Lo habría hecho más cortito sin tanto define pero por claridad y facilidad para cambiar (podemos calcular qué dos enteros tienen dos factores, o tres tres, o tres cuatro, o cuatro cuatro o ....). Creo que venía bien, así como los nombres dados a las variables. Son largos pero sabes en cada momento qué diablos hace cada variable:
#include <stdio.h>
#define NumFactores 4u
#define NumEnteros 4u
#define NumInicial 130000u
int main ( ) {
unsigned int i , numero , inumero = NumInicial , divisor = 2 , contEnteros = 0 , num_fact = 0 ;
while ( 1 ) {
num_fact = 0 , numero = inumero++ ;
while ( numero > 1 )
for( divisor = 2 ; numero > 1 ; divisor++ )
if ( numero % divisor == 0 && num_fact++ >= 0 ) {
while ( ( numero /= divisor ) % divisor == 0 ) ;
}
if ( ( contEnteros = ( num_fact == NumFactores ) ? contEnteros + 1 : 0 ) == NumEnteros ) {
for ( i = 0 ; i < NumEnteros ; i ++ )
printf ( "%u " , inumero - NumEnteros + i ) ;
break ;
}
}
return 0;
}
Y ojito a la variable "NumInicial" ya que si vas a calcular los tres primeros enteros que tengan tres factores habrá que bajarla a algo como 600 (eso es porque ya lo he calculado y sé que salen algo superior a 600
) o a 20 si vas a calcular qué dos enteros tienen dos factores, etc. Lo propio sería ponerla a 2 y así vale para cualquier valor sólo que se penaliza el tiempo de respuesta.
Y sin otro particular, y a la espera de nuevos Retos, un fuerte abrazo a todos de
León.
¡¡¡¡ Saluditos! ..... !!!!
P.D: Sólo espero que no sea una tarea disfrazada de Reto.