Retos de programación C/C++

Iniciado por kutcher, 16 Agosto 2014, 02:23 AM

0 Miembros y 3 Visitantes están viendo este tema.

kutcher

Buenas, abro este post para ir publicando una serie de retos a medida que vayan resolviendo los mismo, con el objetivo estimular a la comunidad a participar mediante la resolución de problemas que competen al mundo de la programación que tanto nos apasiona

RETO #1:

Los primeros dos números consecutivos para tener dos factores primos distintos son:

Código (cpp) [Seleccionar]
14 = 2 x 7
15 = 3 x 5


Los primeros tres números consecutivos para tener tres factores primos distintos son:

Código (cpp) [Seleccionar]
644 = 2² x 7 x 23
645 = 3 x 5 x 43
646 = 2 x 17 x 19.


Encuentra los primeros cuatro números enteros consecutivos para tener cuatro factores primos distintos. ¿Cuál es el primero de estos números?

Espero su participación

Blaster

Hola kutcher me parece excelente la iniciativa este tipo de actividades es lo que hacia falta a este subforo, en cuanto al primer reto lo veo difícil pero de igual manera estoy en ello  ;D

Saludos

engel lex

no lo entendí bien, si es

2 x 3 x 5 = 30

y tienes el primer numero que requiere 3 primos diferentes...

aunque no se si te refieres el primer numero de 3 cifras tal que sea producto de 3 primos

3 x 5 x 7 = 105

es un numero más bajo que el mostrado por ti...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

do-while

¡Buenas!

Cita de: engel lex en 16 Agosto 2014, 06:24 AM
no lo entendí bien, si es

2 x 3 x 5 = 30

y tienes el primer numero que requiere 3 primos diferentes...

aunque no se si te refieres el primer numero de 3 cifras tal que sea producto de 3 primos

3 x 5 x 7 = 105

es un numero más bajo que el mostrado por ti...

De forma general, se refiere a que k enteros consecutivos, tengan m factores primos distintos.

Si quieres plantear el problema de forma general podrías hacer una función que, por ejemplo, reciba tres parámetros, k y m enteros y un vector de dimensión k, y almacene en el vector los primeros k enteros consecutivos que tengan exactamente m factores primos distintos.

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

leosansan

#4
Cita de: kutcher en 16 Agosto 2014, 02:23 AM
Buenas, abro este post para ir publicando una serie de retos a medida que vayan resolviendo los mismo, con el objetivo estimular a la comunidad a participar mediante la resolución de problemas que competen al mundo de la programación que tanto nos apasiona


Encuentra los primeros cuatro números enteros consecutivos para tener cuatro factores primos distintos. ¿Cuál es el primero de estos números?

Espero su participación

Código (cpp) [Seleccionar]


134043 =  3  * 7 * 13 * 491
134044 =  2^2 *  23 * 31  * 47  
134045 =  5 *  17 * 19 *  83
134046 =  2 * 3^2 * 11 * 677



¡¡¡¡ Saluditos! ..... !!!!



Blaster

#5
Cita de: kutcher en 16 Agosto 2014, 02:23 AM
Encuentra los primeros cuatro números enteros consecutivos para tener cuatro factores primos distintos. ¿Cuál es el primero de estos números?

Tal vez no sea la solución mas rápida pero ira mejorando:

Código (cpp) [Seleccionar]
#include <stdio.h>

int factor_primo(int n)
{
    int cant = 0, i;
    for( i = 2; n != 1; i++)
        if(n % i == 0)
        {
            cant++;
            do
                n = n / i;
            while(n % i == 0);
        }
    return cant;
}

int main(void)
{
    int n = 0;
    int i, c = 0;

    for(i = 100000 ;; i++)
    {
       (factor_primo(i) == 4) ? c++ : (c = 0);

        if (c == 4)
        {
            n = i - 3;
            break;
        }
    }
    for(i = 0; i < 4; i++)
       printf("%d\n", n + i);

    return 0;
}



Seria interesante que publiquen los códigos con los cuales resuelven el problema

leosansan

#6
Cita de: Blaster en 16 Agosto 2014, 16:26 PM
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:   ;)

Código (cpp) [Seleccionar]
#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  :laugh: ) 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.  :o

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.  :silbar:

Eternal Idol

Cita de: Blaster en 16 Agosto 2014, 05:51 AM
Hola kutcher me parece excelente la iniciativa este tipo de actividades es lo que hacia falta a este subforo, en cuanto al primer reto lo veo difícil pero de igual manera estoy en ello  ;D

Bueno, para mi no le faltaba nada al foro y ahora le sobra este hilo, da la impresion de que no hay nada util que hacer estos dias (como si estuvieran jubilados o no hubieran trabajado jamas), nadie a quien ayudar con problemas reales y entonces tienen que estar retandose entre los usuarios para tener un objetivo y subir codigo compulsivamente.

Aca tienen un par de nuevos retos en serio y no solamente malas excusas para subir codigo al foro:
Hagan un programa para generar una imagen de un disco rigido (como VHD y VMDK).
Hagan un antivirus con scanner en tiempo real.
Creen una solucion a un problema real: BadUSB.
Creen un tutorial sobre como optimizar codigo, asi nos ahorran 15.000 versiones de soluciones al mismo problema.




leosansan: cuando usas el foro como chat o incluis alusiones a un usuario que no esta participando del hilo - no es la primera vez - tambien te puedo editar y/o borrar el mensaje, que lo sepas; si tenes alguna queja este subforo nunca es el lugar donde hacerla, nunca, te podes comunicar por privado o escribir en "Sugerencias y dudas sobre el Foro" como ya hicieron en su momento, te recuerdo que no hubo ningun cambio de reglas desde ese momento y son las mismas desde antes de que te registraras al foro. Mi postura tambien sigue siendo la misma, algo de codigo es aceptable hasta cierto punto, pero cuando se nota que no aporta nada: "No dudo que lo podamos mejorar, aunque a bote pronto no veo por donde." ya no es aceptable y se bloquea el tema. Espero que tu postdata fuera una broma.




En general creense un Blog/Foro si quieren retarse con problemas elementales (o incluso complejos) y si solo quieren subir codigo esta sourceforge por ejemplo, piensen algo proyecto util.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón