elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Calculo de números primos
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: Calculo de números primos  (Leído 12,719 veces)
Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Calculo de números primos
« Respuesta #10 en: 12 Noviembre 2011, 17:09 pm »

Si ponés un 1 o un 2 en tu programa, no entra ni siquiera una vez en el for, porque no se cumple la condición (i < valor), ya que i comienza en el número 2.
Sin embargo, no está bien el algoritmo. Ese bucle no hace nada. ¿Como sabés si es primo o no ahí?
Primero pensá el problema matemáticamente, luego pasalo a la máquina tal cual lo pienses.
En este caso, un número es primo si y solo si es divisible sólo por si mismo y por el 1.
Entonces, para pasarlo a máquina, tendrás que ver si el número es divisible por algún número entre el 1 y el mismo. Para eso se usa el bucle, cuando encuentres algún número que divida a tu valor, entonces no será primo (ahí entra el flag en funcionamiento), sino, es primo.


En línea

jamatbar

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: Calculo de números primos
« Respuesta #11 en: 12 Noviembre 2011, 17:18 pm »

Perdon, me comí un par de líneas de código, ya lo he editado

Saludos


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Calculo de números primos
« Respuesta #12 en: 12 Noviembre 2011, 17:33 pm »

En el caso de la aproximacion de fuerza bruta esta se puede mejorar un poco reduciendo el rango y utilizando al contador del bucle como bandera. De esta forma:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int es_primo(int num);
  5.  
  6. int main(void)
  7. {
  8.    int i;
  9.  
  10.    for (i = 2; i < 100; i++)
  11.        if (es_primo(i))
  12.            printf("%d\n", i);
  13.  
  14.    return EXIT_SUCCESS;
  15. }
  16.  
  17. int es_primo(int num)
  18. {
  19.    int i;
  20.  
  21.    for (i = 2; i*i <= num && num % i != 0; i++)
  22.        ;
  23.  
  24.    return i*i > num;
  25. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
jamatbar

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: Calculo de números primos
« Respuesta #13 en: 12 Noviembre 2011, 17:48 pm »

Ya he conseguido hacerlo, muchas gracias a todos por vuestra ayuda.

Saludos!
En línea

jamatbar

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: Calculo de números primos
« Respuesta #14 en: 12 Noviembre 2011, 18:03 pm »

A ver, el programa me ha quedado así:

Código
  1. #include <stdio.h>
  2.  
  3. int main ()
  4. {
  5.  int valor;
  6.  int i;
  7.  int flag = 1;//variable de control
  8.  printf("Introduzca un valor:");
  9.  scanf ("%d", &valor);//lee el número
  10.  
  11.  for (i=2; i < valor ; i++ )
  12.    if (0 == (valor % i ))
  13.      {//bucle que se repite hasta que i es igual a valor
  14. flag = 0;
  15.      }
  16.  if (flag == 1)
  17.    printf ("%d es un número primo\n", valor);
  18.  else // en funcion del valor de flag se imprime una u otra cosa
  19.    printf ("%d no es primo \n", valor);
  20.  return 0;
  21. }

Ahora me piden que: Para mejorar la eficiencia del programa, el bucle debe finalizar una vez encontrado el primer divisor. Para ello deberá hacer uso de la variable de control usada en el apartado anterior.

No lo entiendo, ¿se supone que el programa ya termina cuando encuentra un divisor no?

Saludos
En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Calculo de números primos
« Respuesta #15 en: 12 Noviembre 2011, 18:14 pm »

Te recomiendo enormemente ponerle respectivas llaves a todas las instrucciones, más allá de que lleven una sola sentencia o no.
Ahora bien, no, ahí el programa sigue hasta terminar con el bucle for.

Para que termine cuando el flag lo indique o cuando llegue a terminar todas las repeticiones deberás usar otra estructura repetitiva (while o do-while) con 2 condiciones: Que el flag siga siendo falso y hasta que llegue al valor en cuestión.
En línea

CobraCY

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Calculo de números primos
« Respuesta #16 en: 12 Noviembre 2011, 18:15 pm »

ya mira, cuando haces el FOR, dices: "Declara una variable 'i' que inicie en dos(2) y que se aumente en 1(i++) mientras que sea menor a el valor de 'n'.".

Con esto haces que tu variable 'i' haga el recorrido desde el numero 2 hasta n.
Si vez bien el código que te puse usé la siguiente linea para el FOR:
Código
  1. for(int i=2; i < n && flag==0;i++)
  2.  

Con esto digo: "Declara una variable 'i' que inicie en dos(2) y que se aumente en 1(i++) mientras que mi variable 'i' sea menor que 'n' y además que mi variable 'flag' sea sea exactamente igual a cero(0)".

Si te das cuenta en tu código haces un 'if' donde preguntas si el residuo de tu valor entre el valor que lleva la variable 'i' es cero(0), entonces cambie tu flag a 0, ese valor puedes utilizarlo en el for para que si 'flag' es distinto(!=) de cero(0) entonces continúe con la ejecución del for.

Saludos.
En línea

RyogiShiki


Desconectado Desconectado

Mensajes: 745


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: Calculo de números primos
« Respuesta #17 en: 12 Noviembre 2011, 18:26 pm »

NO he visto las respuestas, pero dejo este video que ayuda mucho:

En línea

satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Calculo de números primos
« Respuesta #18 en: 12 Noviembre 2011, 20:24 pm »

Hola

Además el bucle se podría acortar hasta la mitad:

Código
  1. for(int i=2; i <= n/2 && flag==0;i++)
  2.  

Saludos
En línea

Breakbeat como forma de vida
CobraCY

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Calculo de números primos
« Respuesta #19 en: 12 Noviembre 2011, 21:13 pm »

te hice un video rápido para ver si te puedo ayudar.

Saludos.
En línea

Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Python 2.6] Funcion generadora de Numeros primos (5.761.455 primos en 19 seg)
Python
katas 2 9,888 Último mensaje 10 Marzo 2010, 01:50 am
por Novlucker
NUMEROS PRIMOS
Programación C/C++
alviera 4 6,081 Último mensaje 7 Diciembre 2010, 06:39 am
por N0body
Duda acerca del calculo de combinaciones de numeros y letras en vb.net 2010
.NET (C#, VB.NET, ASP)
arturoro 5 4,325 Último mensaje 20 Diciembre 2015, 07:33 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines