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)
| | |-+  Problema con programa para hallar numeros primos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con programa para hallar numeros primos  (Leído 4,596 veces)
Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Problema con programa para hallar numeros primos
« en: 24 Mayo 2014, 15:21 pm »

Buenas, estoy intentando hacer un programa que halle los numeros primos entre 0 y n, ya se que ha salido mas de una vez en el foro y que habrá mucha información por ahí sobre este problema. Ya he estado leyendo algunos posts anteriores y basandome en ellos hice esto, que es la parte prinicpal del programa, el resto da igual ahora mismo:

Código
  1. for(j= 3; j <= num; j += 2){
  2.        for(i = 3; i <= j; i++){
  3.            if((j%1) == 0 && (j%j) == 0 && (j%i) == 0)
  4.            printf("\n%d\t", j);
  5.        }
  6.    }

En este codigo, con el 15 por ejemplo, se realiza la comprobacion 13 veces (desde 3 a 15, ambos inclusive), 3 de ellas son verdaderas (i=3; i=5; i=15) y el resto son falsas. Digo esto porque con esta comprobacion el 15 sale 3 veces, y que tampoco me valdria poner:

Código
  1. if((j%1) == 0 && (j%j) == 0 && (j%i) != 0)

Porque saldría el resto de las veces, es decir, 10.

También probé a poner:

Código
  1. if((j%1) == 0 && (j%j) == 0)

El problema es que esta condicion la cumplen todos los numeros, no solo los primos, lo que pasa es que lo que caracteriza a los numeros primos es que solo cumplen esas dos condiciones, lo que quiero decir es que no logro aislar los numeros que solo cumplan esas dos condiciones, que son los que yo busco.

Un saudo


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema con programa para hallar numeros primos
« Respuesta #1 en: 24 Mayo 2014, 15:37 pm »

Código
  1. if((j%1) == 0 && (j%j) == 0)

Esta condición es absurda. Cualquier número mayor que 0 cumple que es divisible entre 1 y entre si mismo.


En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Problema con programa para hallar numeros primos
« Respuesta #2 en: 24 Mayo 2014, 16:31 pm »

Código
  1. if((j%1) == 0 && (j%j) == 0)

Esta condición es absurda. Cualquier número mayor que 0 cumple que es divisible entre 1 y entre si mismo.

Ya, pero en el momento en el que la puse no me di cuenta  :xD

Aunque en verdad, esa condición debe de ser la única que cumplan los números primos y es lo que no se hacer, como aislar los numeros que solo cumplen esa condicion y ninguna mas.

Un saludo.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema con programa para hallar numeros primos
« Respuesta #3 en: 24 Mayo 2014, 17:11 pm »

esa condición debe de ser la única que cumplan los números primos y es lo que no se hacer, como aislar los numeros que solo cumplen esa condicion y ninguna mas.
Solo tienes que utilizar un bucle que se repita mientras el residuo de la división "N / contador" sea diferente de cero con el contador iniciando con el valor dos y terminando de forma natural con el valor N si el numero es primo (si tiene un valor menor significa que no lo es).

Un ejemplo:
Código
  1. int i;
  2. int j;
  3.  
  4. for (i = 2; i < 100; i++){
  5.   for (j = 2; i % j != 0; j++)
  6.      ;
  7.  
  8.   if (j == i)
  9.      printf("%d\n", j);
  10. }

Esa es la forma mas fácil pero menos eficiente, ejemplos sobre como reducir el numero iteraciones los puedes consultar mediante el motor de búsqueda de los foros.

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
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema con programa para hallar numeros primos
« Respuesta #4 en: 24 Mayo 2014, 17:44 pm »

Código
  1. int i;
  2. int j;
  3.  
  4. for (i = 2; i < 100; i++){
  5.   for (j = 2; i % j != 0; j++)
  6.      ;
  7.  
  8.   if (j == i)
  9.      printf("%d\n", j);
  10. }
sobre como reducir el numero iteraciones

Pueder reducir a la mitad, poniendo for (j = 2; i % j != 0 && j<i/2; j++) por ejemplo. O j<=sqrt(i)

También puedes ir almacenando un vector de números primos, y luego sería comprobar si es divisible entre esos números.

Pero para números pequeños, la solución que puso rir3760 sobra.
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Problema con programa para hallar numeros primos
« Respuesta #5 en: 24 Mayo 2014, 17:51 pm »

recomiendo

for(actual  =3; actual <= maximo; actual = actual + 2){
   for(comprobador=3; comprobador <=(int) raiz(actual);comprobador = comprobador +2){
    
//codigo

}}
eso debería darte una eficiencia bastante alta (sorry por no usar geshi, estoy en el cel y es complicado)

solo pasa por impares y la verificacion solo por impares y solo hasta la raiz del número
En línea

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.
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema con programa para hallar numeros primos
« Respuesta #6 en: 24 Mayo 2014, 19:04 pm »

.............................................
Aunque en verdad, esa condición debe de ser la única que cumplan los números primos y es lo que no se hacer, como aislar los números que solo cumplen esa condición y ninguna mas.


Has puesto el dedo en la llaga: si es primo los divisores, sin contar el 1 y al propio número son cero, si no no es primo.

Como ves todo se reduce a ver si tiene algún divisor, cosa que previamente no sabes y habrá que ir comprobando para cada número.

Te paso un código comentado con esa idea.

 Ya lo de ir de dos en dos recorriendo sólo los impares o llegar tan sólo hasta sqrt(i) o mejor, porque no usamos la librería math para sqrt, hasta j*j<=i, son detalles de mejorar la eficiencia pero creo que no era esa la cuestión.

Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.  int i,j,num=15,aux=0;
  5.  printf("2  ");/** supuesto num>1 **/
  6.  for (i=3; i<=num;i+=2) {
  7.    aux=0;
  8.    for (j=3;j*j<=i;j+=2){
  9. /** Aqui si tiene un divisor no es primo y pongo aux a 1
  10.  para saberlo y rompo el bucle ya que no tiene mayor importancia
  11.  que tenga mas divisores **/
  12.      if (i%j==0){
  13.        aux=1;
  14.        break;
  15.      }
  16.    }
  17. /** Aqui si aux=0 es que no tiene divisores y por tanto es primo **/
  18.    if (aux==0)
  19.      printf ("%d  ",i);
  20.  }
  21.  return 0;
  22. }


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



En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programa para hallar números amigos « 1 2 »
Programación General
Charderak 14 23,350 Último mensaje 27 Junio 2010, 19:26 pm
por Charderak
Ayuda para mejorar programa para números primos VB 2010 Express
.NET (C#, VB.NET, ASP)
juanlulete 6 9,606 Último mensaje 17 Julio 2012, 07:59 am
por Yoghurt
Ayuda con Programa numeros primos matriz
Java
Jaime1315 7 11,320 Último mensaje 9 Febrero 2013, 13:58 pm
por Mitsu
[JS] ¿Programa para calcular números primos?
Scripting
Linton 5 19,440 Último mensaje 23 Julio 2013, 07:40 am
por Linton
Problema simple con programa números primos
Programación C/C++
jamatbar 9 6,388 Último mensaje 12 Agosto 2014, 05:29 am
por leosansan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines