Foros del Web » Programando para Internet » Python »

numeros primos

Estas en el tema de numeros primos en el foro de Python en Foros del Web. Hola!!! Estoy buscando una manera de crear una función que al darle un trozo de números positivos, (por ejemplo, los números del 1 al 10), ...
  #1 (permalink)  
Antiguo 27/11/2010, 11:19
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 13 años, 5 meses
Puntos: 1
numeros primos

Hola!!!
Estoy buscando una manera de crear una función que al darle un trozo de números positivos, (por ejemplo, los números del 1 al 10), me devuelva los que son primos.

El problema es que esa función, con cada numero de ese trozo, haga la prueba con todos los divisores posibles en ese trozo...y al no encontrar divisores (mas que el 1 y el si mismo), para que el resto de la división no de 0, me enseñe por la pantalla esos números.
Me gustaría que por favor, me echarais una mano en crear esta función diciéndome los pasos a seguir.

Un saludo.

P.D.: Se me ha olvidado decir que los números tienen que ser enteros.
  #2 (permalink)  
Antiguo 27/11/2010, 11:26
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: numeros primos

Usa la criba de Eratóstenes
  #3 (permalink)  
Antiguo 27/11/2010, 19:58
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: numeros primos

Si ya me lo he leído, ¿pero como podría escribir eso en Python?...el problema es que ese algoritmo cojee el primer numero y quita todos sus múltiplos...y me es muy complejo escribir en Python...
  #4 (permalink)  
Antiguo 27/11/2010, 20:31
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: numeros primos

Ni siquiera leíste el link, hay te viene una implementación en python.
  #5 (permalink)  
Antiguo 28/11/2010, 03:38
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: numeros primos

Si que lo ví, lo que pasa es que quiero crear algo menos complejo, ya que yo todavía no se ni que es "set" ni "floor".
  #6 (permalink)  
Antiguo 28/11/2010, 11:27
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: numeros primos

Aquí una implementación hecha por mi.

Código Python:
Ver original
  1. n = 100
  2. tabla = [0] * (n + 1)
  3.  
  4. tabla[0] = 1
  5. tabla[1] = 1
  6. i = 2
  7. while i*i <= n:
  8.     if tabla[i] == 0:
  9.         j = i
  10.         while i*j <= n:
  11.             tabla[i*j] = 1
  12.             j += 1
  13.     i += 1
  14.            
  15. for i, v in enumerate(tabla):
  16.     if not v:
  17.         print i
  #7 (permalink)  
Antiguo 28/11/2010, 12:21
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: numeros primos

¿te puedo hacer una pregunta?

no entiendo que significa "tabla" , ¿me lo puedes explicar un poco?

y al utilizarlo no me sale nada solo una lista de 'i'

Mil Gracias.
  #8 (permalink)  
Antiguo 28/11/2010, 12:27
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: numeros primos

Tabla es una lista con n + 1 ceros y por lo tanto con posiciones de 0 a n

Que raro a mi me funciona de maravilla.
Esto es lo que me sale:
Código:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
  #9 (permalink)  
Antiguo 29/11/2010, 01:05
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: numeros primos

yo pulso f5 y me sale:

Código Python:
Ver original
  1. i
  2. i
  3. i
  4. i
  5. i
  6. i
  7. i
  8. i
  9. i
  10. i
  11. i
  12. i
  13. i
  14. i
  15. i
  16. i
  17. i
  18. i
  19. i
  20. i
  21. i
  22. i
  23. i
  24. i
  25. i
  #10 (permalink)  
Antiguo 29/11/2010, 05:24
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: numeros primos

vale lo acabo de solucionar.

entiendo lo de la tabla,pero no entiendo apenas nada del 4 para delante...¿me lo explicas porfavor?

P.D.:Basicamente lo de "tabla[i]" no entiendo esos corchetes.
  #11 (permalink)  
Antiguo 29/11/2010, 05:33
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: numeros primos

Mejor prefiero que me ayudes a construir lo que tu has echo,,,explicandome que es cada cosa.Por que si te digo la verdad solo entiendo las 2 primeras lineas de tu codigo.

Mil gracias.
  #12 (permalink)  
Antiguo 29/11/2010, 09:54
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: numeros primos

Quilate las comillas que le pusiste a i al momento de imprimir.

Mejor te paso libros y te encargo que leas:
Python para todos -> Hasta la pagina 35
Introducción a la programación con python -> Hasta la pagina 210 (Este libro es muy extenso)
Inmersión en python -> Hasta la pagina 21

Si ya haz visto y tienes bien claro algunos conceptos entonces puede saltarte esas partes, de lo contrario no lo hagas.
  #13 (permalink)  
Antiguo 29/11/2010, 10:10
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: numeros primos

he conseguido crear una funcion por mi cuenta al final.

dime que te parece y que hay que corregir porfavor

Código Python:
Ver original
  1. def primos(n):
  2.     for i in range(2,n):
  3.         for x in range(2,i):
  4.             if not i%x == 0:
  5.                 print (i)
  6. primos(10)

el problema es que no me salen los numeros que yo quiero y creo que falta algo...porfavor ayudame.
  #14 (permalink)  
Antiguo 29/11/2010, 10:56
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: numeros primos

Divide tu programa en 2, una función llamada es_primo y otra imprime_primos.

En es_primo valida que sea primo y en imprime_primos iteras desde 2 hasta n y vas checando si es primo o no (con la función es_primo).

Te quedaria algo asi:
Código Python:
Ver original
  1. for i in range(2, n):
  2.     if es_primo(i):
  3.         print i
  #15 (permalink)  
Antiguo 29/11/2010, 13:04
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: numeros primos

Código Python:
Ver original
  1. def primos(n):
  2.     for x in range(2,n):
  3.         for y in range(2,x):
  4.             if x % y==0:
  5.                 print (x)
  6.                 return
  7.             else :
  8.                 print (x)
  9. primos(20)

Lo he intentado y sigo igual...es que me lio bastante aunque ya por lo menos va mejorando,dime que podemos arreglar de ahi...
  #16 (permalink)  
Antiguo 29/11/2010, 13:42
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: numeros primos

Puedes usar un flag (o bandera). Que te indique si entraste al if alguna vez.

Deberías leer para que sirve return. En general deberías leer lo que te recomendé, (no es necesario que leas los 3 libros tan solo con que leas hasta donde te indique de alguno de los que te mencione con eso basta).

Pero si vienes, dices corrígeme y veo claramente esto es algún tipo de ejercicio de la escuela (como claramente este se ve) y ademas estas negado a leer entonces no puedo ayudarte. Lee este post y mira como acabo este usuario.

Cuando tienen alguna puntual como, ¿Para que sirve return?, ¿Para que sirve break?, ¿Que significa l[:]? y todo ese tipo de cosas eres bienvenido. Pero de eso a corregir tu tarea, vamos que ya te he dado links, implementaciones, libros, etc...

Si simplemente te corrigiera no aprenderías nada.
  #17 (permalink)  
Antiguo 29/11/2010, 15:17
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: numeros primos

hombre en eso te doy la razon, pero es que yo tengo esta asignatura como unas practicas,quiero decir que de esto no tengo ningun examen ni tengo que aprender nada solo cojerle practica...a ver mi profesor no tiene ningun problema en decirme que tengo que solucionar de ese codigo...pero el problema es que el horario suyo es de tarde...y vamos que es por vagancia no ir a preguntarle. Yo intento hacer todo lo que me dices,siempre voy a aportar mi grano de arena(aunque sea poco) para que veas que por lo menos he echo algo.Estaria bien que dieras ejemplos:por ejemplo el return pues sirve para tal y tal y poner un par de ejemplos cortos para ver y que yo piense.
pero bueno si te ves molesto porque te pida demasiada ayuda, lo entiendo.

Solo hay en una cosa que no estoy de acuerdo y es en la siguiente frase:Si simplemente te corrigiera no aprenderías nada.yo pienso que esto es como un examen que despues de hacerlo te lo corrigen...imaginate que no te lo corrigen, pero te dan la nota, ¿aprenderias algo?...a ver yo entiendo que te molesta hacer el ejercicio,pero yo nunca te he pedido hacer el ejercicio,...te he pedido que me ayudaras,que me corrijieras o que me explicaras cuales han sido tus pasos para saber la dinamica.Es mas ami me hubiera dado mas rabia que me hubieras soltado el ejercicio hecho asi como asi.

si no piensas ayudarme mas hazmelo saber...para asi cojer hora donde mi profe.

Muchas gracias por todo.Un saludo
  #18 (permalink)  
Antiguo 29/11/2010, 15:56
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: numeros primos

Punto del return es hacerte que investigues y que por lo tanto leas. Si bien a tu código a pesar de no ser optimo, casi resuelve el problema.

El return no sirve para salir de un for si no que sirve para salir de una función devolviendo algo.
Ejemplo:
Código Python:
Ver original
  1. def es_pan(n):
  2.     if n &#37; 2 == 0:
  3.         return True
  4.     return False
La función regresa True (Verdadero) si el numero es par y False (Falso) si el numero no es par. Puedes modificar esta función para que te diga si es primo o no y llamarla es_primo.

break sirve para salir de un for
Código Python:
Ver original
  1. for i in range(100):
  2.     if i == 2:
  3.         print "Llegue hasta el 2"
  4.         print "Saliendo"
  5.         break
  6. print "Estoy fuera del for"

El punto de todo esto es hacerte leer y que investigues no que simplemente llegues y digas corrijan me. Ademas de hacerte que pongas una duda puntual.

En todo caso ya te dije que se tenia que hacer (usar un flag), te explique un break, return. También te dije que podías hacer una prueba de escritorio para que veas en que parte esta fallando tu programa.

Con esto que te pase debería ser mas que suficiente para que puedas hacer tu programa.

Si te corrigiera y fuera un error de sintaxis diría a esta bien, cualquiera comete esos errores. Pero un error de lógica mas si estas aprendiendo. Dime te empiezo a corregir problema tras problema entonces esto no ayudaría, es mas terminas acostumbrándote a esto. Y terminas posteando problemas completos si ya ni siquiera sin intentarlo o lo intentas pero no tienes una idea de lo que estas haciendo.

Si estas estudiando computación te recomiendo estudies bien este tipo de materias, por que en un futuro lo mas probable es que terminaras comiendo de esto.

Si llego y simplemente corrijo tu código, dime ¿quien va a ganar mejor?, el que lo corrige o el que medio lo hace? En el peor de los casos pierdes tu empleo y contratan al alguien que haga bien el trabajo.

No me enoja (por que no tiene caso) el ayudar a las personas, de hecho me encanta ayudarlas. Si no quisiera ayudarte solo te diría, ponle esto aquí y listo. Te estoy dando algo mucho mas que eso, te estoy ayudando a aprender por ti mismo y a resolver tus problemas por medio de investigación.

Nota final: Si tienes profe hazlo trabajar que para eso le pagas, pero mas importe es ponerte a estudiar tu que para eso pagas. Eso es como pagar gimnasio y no ir por que tienes flojera.
  #19 (permalink)  
Antiguo 29/11/2010, 16:01
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: numeros primos

voy a ver que consigo sacar y lo publicare aqui.

gracias

Etiquetas: numeros, primos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:44.