[Curso] Introducción a la programación en C (VIII)

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, m0skit0, LnD, ka69, zacky06

Avatar de Usuario
dRoLl3R
Habitual
Habitual
Mensajes: 315
Registrado: 29 Sep 2009, 21:30
Ubicación: [ † ] Asturias

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por dRoLl3R »

Lei este comentario y me vino la inspiracion.
Spoiler:
finfantasy escribió:Si os fijais, yo ya os di una pista bastante clara, para comprobar el 23 llegabas hasta el 4, para comprobar el 25, llegabas hasta el 5, para el 35 llegariamos hasta el 5 también, para el 36 ya no, llegaríamos hasta el 6...
Me puse ha reescribir el programa sin leer mas comentarios que no quiero ver la solución xD. A VER si ahora está bien ;).
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])
{
    int numero;
    int n = 1;
    int d = 2;
   
    printf("Introduce un numero entero: ");
    scanf("%d", &numero);
   
    while ((numero % d != 0) && (n != 7))
    {     n = n + 2;
          d = n;
    }
   
    if ((numero % d == 0) && (numero != d))
       printf("El numero no es primo. Es divisible por %d.", d");
    else
       printf("El numero es primo");
   
    return 0;
}

EDITO: he hecho otra correcion en el codigo
PSP3ooo: 4.21 -> 5.00 -> 5.03 -> 5.03 GEN-A -> 5.03 M33 -> 5.03 MHU -> 5.03 GEN-C -> 5.03 MHU -> 6.20 PRO-B4

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por m0skit0 »

Droller escribió:(n != 7)

:? Explícame esto
Imagen

Avatar de Usuario
finfantasy
Habitual
Habitual
Mensajes: 153
Registrado: 15 Oct 2009, 19:00

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por finfantasy »

Es el número mágico!

Avatar de Usuario
dRoLl3R
Habitual
Habitual
Mensajes: 315
Registrado: 29 Sep 2009, 21:30
Ubicación: [ † ] Asturias

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por dRoLl3R »

m0skit0 escribió:
Droller escribió:(n != 7)

:? Explícame esto

Pos lo que hice era que los numero impares por debajo de 10 (3,5,7) que son primos sean los divisores pero me he dado cuenta de que así dejo otros números que no son primos como que si lo son como por ejemplo el 121 que es 11 * 11.
Ya se me ha ocurrido como hay que hacerlo de verdad para reducir a la mitad su velocidad. Mas tarde lo posteo ;)

EDITO: bueno creo que ahora si que si xD ahora si que he reducido a la mitad los numeros que revisa el programa ;).
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])
{
    int num, n = 3;
   
    printf("Te voi a decir si un numero es primo o no.\n");
    printf("Introduce un numero entero: ");
    scanf("%d", &num);
   
    if (num < 2)
        printf("\nEl numero no es valido.");
    else if (num == 2)
        printf("\nEl numero es primo.");
    else if (num % 2 == 0)
        printf("\nEl numero no es primo. Es divisible por 2.");
    else
    {
        while (num % n != 0)
           n = n + 2;
       
        if (num == n)
           printf("El numero es primo.");
        else
           printf("El numero no es primo. Es divisible por %d.", n);
    }
   
    return 0;
}


¿Que opina profe?
Un saludo a todos ;)
PSP3ooo: 4.21 -> 5.00 -> 5.03 -> 5.03 GEN-A -> 5.03 M33 -> 5.03 MHU -> 5.03 GEN-C -> 5.03 MHU -> 6.20 PRO-B4

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por m0skit0 »

Droller escribió:¿Que opina profe?

Que por fin alguien se dio cuenta (aparte de un par que ya saben) de que si un número es par, no puede ser primo (mira que era difícil, eh :lol:) Enhorabuena, has superado la primera parte del reto.

Pero aún se puede reducir más aún. ¡A ver si eres capaz! ;)
Imagen

Avatar de Usuario
dRoLl3R
Habitual
Habitual
Mensajes: 315
Registrado: 29 Sep 2009, 21:30
Ubicación: [ † ] Asturias

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por dRoLl3R »

¿¿MASSSSS??
Buff... ¿te refieres a reducir el numero de numeros que analiza, es decir menos que todos los impares?

EDITO: ¿será quitando los que son divisibles por 5? ;) Dime que si xD
PSP3ooo: 4.21 -> 5.00 -> 5.03 -> 5.03 GEN-A -> 5.03 M33 -> 5.03 MHU -> 5.03 GEN-C -> 5.03 MHU -> 6.20 PRO-B4

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por m0skit0 »

Eso mismo :twisted:
Imagen

Avatar de Usuario
dRoLl3R
Habitual
Habitual
Mensajes: 315
Registrado: 29 Sep 2009, 21:30
Ubicación: [ † ] Asturias

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por dRoLl3R »

Aquí lo tienes espero que este todo bien ;)
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])
{
    int num, n = 3;
   
    printf("Te voi a decir si un numero es primo o no.\n");
    printf("Introduce un numero entero: ");
    scanf("%d", &num);
   
    if (num < 2)
        printf("\nEl numero no es valido.");
    else if (num == 2)
        printf("\nEl numero es primo.");
    else if (num % 2 == 0)
        printf("\nEl numero no es primo. Es divisible por 2.");
    else if (num == 5)
        printf("\nEl numero es primo.");
    else if (num % 5 == 0)
        printf("\nEl numero no es primo. Es divisible por 5.");
    else
    {
        while (num % n != 0)
           n = n + 2;
         
        if (num == n)
           printf("El numero es primo.");
        else
           printf("El numero no es primo. Es divisible por %d.", n);
    }
   
    return 0;
}

Si me dices que se puede más me retiro xD

EDITO: he editado el código eliminando lo que menciona moskito en el comentario siguiente

EDITO2: modificado el código ya que con num = 5 decía que no era primo
Última edición por dRoLl3R el 11 Mar 2010, 08:38, editado 2 veces en total.
PSP3ooo: 4.21 -> 5.00 -> 5.03 -> 5.03 GEN-A -> 5.03 M33 -> 5.03 MHU -> 5.03 GEN-C -> 5.03 MHU -> 6.20 PRO-B4

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por m0skit0 »

Código: Seleccionar todo

if (n == 3)
     n = n + 4;
else
     n = n + 2;

:? Esto está evidentemente mal. Se trata de mejorarlo, no de joderlo :lol:

Se puede reducir a la mitad los números aún :twisted: Pero bueno, ya con este avance te lo doy por válido. Aunque si consigues sacarlo, mejor que mejor.
Imagen

Avatar de Usuario
dRoLl3R
Habitual
Habitual
Mensajes: 315
Registrado: 29 Sep 2009, 21:30
Ubicación: [ † ] Asturias

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por dRoLl3R »

¿Por que esta mal? Con lo que puse se salta el 5 en el while. No entiendo porque está mal. :oops:

EDITO: vale se debería saltar todos los múltiplos del 5 no solo el 5. ¿¿es eso??
PSP3ooo: 4.21 -> 5.00 -> 5.03 -> 5.03 GEN-A -> 5.03 M33 -> 5.03 MHU -> 5.03 GEN-C -> 5.03 MHU -> 6.20 PRO-B4

Responder