problema con python cuestion nº primos

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

problema con python cuestion nº primos

Notapor alfredo23 » Vie Dic 10, 2010 8:59 pm

tengo q implementar unprograma que me de una lista de numeros primos existentes en un intervalo y el sumatorio de los mismo . he pensado hacer 2 funciones , una que me diga si el nº es primo o no y otra que imprime pero nose como unir ambas ni como hacer el sumatorio de los numeros de la lista. aqui os dejo lo que he hecho por si alguien me puediera ayudar.Muchas gracias ;)

Código: Seleccionar todo
def primo(x):
    if x==2:
        return(True)
    if x%2==0:
        return(False)
    i=3
    while i**2<=0:
        if x%1==0:
            return(False)
    i=i+2
    return(True)

def lista_primos(n):
    while primo(x)==True:
        for x in range(2,n):
            return(x)



print("Vamos a calcular los numeros primos de un intervalo")
n=int(input("Introduce el numero"))
print("El resultado es:",lista_primos(n))
Última edición por alfredo23 el Sab Dic 11, 2010 7:22 pm, editado 1 vez en total
alfredo23
 
Mensajes: 12
Registrado: Jue Nov 04, 2010 8:49 pm

Re: problema con python cuestion nº primos

Notapor Juanxo » Sab Dic 11, 2010 1:09 am

buenas alfredo:

lo primero de todo corrige si puedes el tema de las etiquetas code: la primera está bien colocada, pero la segunda, la que lleva "/" tienes que ponerla donde termian el código

Gracias
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: problema con python cuestion nº primos

Notapor alfredo23 » Sab Dic 11, 2010 7:26 pm

muchas gracias por tu atencion o he intentado hacer de otra manera siguiendo el manual de python pero tampoco consigo nada , si puderas indicRME LOS ERROR Y AYUDARME..

Código: Seleccionar todo
def primos(n):
    for i in range(2,n):
        for x in range(2,i):
            if i%x==0:
                break
            else:
                return(i)
           
def sumadig(n):
    nstr=str(n)
    lista=[]
    for i in range (len(nstr)):
        lista.append(nstr[i])

    suma=0
    for i in lista:
        suma +=int(i)
    return(suma) 


n=int(input("Introduzca el intervalo n"))
print("El resultado es:",sumadig(n))
alfredo23
 
Mensajes: 12
Registrado: Jue Nov 04, 2010 8:49 pm

Re: problema con python cuestion nº primos

Notapor Juanxo » Sab Dic 11, 2010 8:50 pm

varias cosas:
para calcular si un número es primo no hace falta comprobar si es divisible por numeros desde 2 a n, basta con llegar hasta la raiz de n, porque de ahí en adelante te van a salir resultados repetidos.

yo creo que lo más sencillo es que te pasen un rango y crear una lista como lo estás haciendo, pero creo que tienes problemas en el primos:



Código: Seleccionar todo
import math
from math import *


def numeros_primos(n):
 
  primos = []
  suma = 0
  for i in range(2, n):
    maximo = int(math.sqrt(i)) + 1
    j = 2 if maximo > 2 else maximo
    while ( j < maximo and (( i % j) != 0 )):
      j = j + 1
    if ( j == maximo ):
      primos.append( i )
      suma += i
  return primos, suma

n=int(input("Introduzca el intervalo n"))
primos, suma = numeros_primos(n)

print "Los numeros primos son", primos
print "La suma es: ", suma
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: problema con python cuestion nº primos

Notapor alfredo23 » Sab Dic 11, 2010 11:50 pm

Muchas gracias ya lo entendido el proceso y voy a intentar hacerlo por mi cuenta de una forma mas simple solo hay una parte que no tengo muy clara ojala me la pudieras esplicar un poco.sinto tanta molestia
Código: Seleccionar todo
j = 2 if maximo > 2 else maximo
    while ( j < maximo and (( i % j) != 0 )):
      j = j + 1
alfredo23
 
Mensajes: 12
Registrado: Jue Nov 04, 2010 8:49 pm

Re: problema con python cuestion nº primos

Notapor kaiser » Dom Dic 12, 2010 12:59 am

En realidad solo es necesario dividir entre los números primos inferiores a la raíz de n. Aquí dejo mi pequeña (15 líneas) aportación:

Código: Seleccionar todo
def buscar_sumar_primos(n):
    lista_primos = [1]
    sum = 1
    for num in range(2, n + 1):
        for div in (lista_primos[1:]):
            if num % div == 0:
                break
        else:
            lista_primos.append(num)
            sum += num
    return lista_primos, sum

(lista_primos, suma)=buscar_sumar_primos(int(raw_input("Introduzca el final del intervalo: ")))
print("Los números primos encontrados son:"), lista_primos, ("\nEl sumatorio es:"), suma


El código de Juanxo es fácil aunque raro si no se conoce esa expresión. Es una expresión del tipo A si C sino B, es decir si se cumple C se devuelve A sino se devuelve B. En éste caso si maximo > 2 entonces j = 2, sino j = maximo. En el bucle while utiliza dos condiciones, que j no llegue al final (j < maximo) o que el número sea primo i % j != 0, en el if de la línea siguiente hace la comprobación, si j ha llegado al final j == maximo significa que el número es primo y lo añade, si j != maximo es que el bucle se ha "roto" antes de llegar al final (por culpa de la segunda condición) lo que significa que el número no es primo.

Un Saludo!
De la API al IDE y del IDE a la API.
Avatar de Usuario
kaiser
 
Mensajes: 121
Registrado: Mié Nov 24, 2010 7:47 pm
Ubicación: Madrid (España)

Re: problema con python cuestion nº primos

Notapor alfredo23 » Dom Dic 12, 2010 8:19 pm

gracias kaisere la verdad es que tu programa es mas comprensible para el nivel de programacion que yo tengo pero el resultado que me da no es lo que yo quiero y no entiendo porque , te pongo a continuacion que muestra en mi ordenador :

Introduzca el final del intervalo13
Los nº primos del intervalo son: [1]
La suma de los mismos es: 1

Código: Seleccionar todo
def numeros_primos(n):
    primos=[1]
    suma=1
    for num in range(2,(n+1)):
        for div in (primos[1:]):
            if num % div==0:
                break
            else:
                primos.append(num)
                suma += num
    return(primos,suma)


n=int(input("Introduzca el final del intervalo"))
(primos,suma)=numeros_primos(n)
print("Los nº primos del intervalo son:",primos)
print("La suma de los mismos es:",suma)
alfredo23
 
Mensajes: 12
Registrado: Jue Nov 04, 2010 8:49 pm

Re: problema con python cuestion nº primos

Notapor Juanxo » Dom Dic 12, 2010 10:36 pm

creo que se porque falla:

for div in (primos[1:]):

esto hace que itere saltandose el primero, ya que no tiene sentido comprobar si es divisible por 1

Pero el problema es que hace que, como nunca llegue a entrar en el segundo for (primos[1:] devuelve la lista vacia siempre) pues no se actualizan los valores
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: problema con python cuestion nº primos

Notapor kaiser » Dom Dic 12, 2010 10:43 pm

No, el problema está en que has cambiado el else del if num % div == 0. Fijate que yo lo tengo puesto a la altura (tabulación) del for y tu lo has tabulado a la altura del if. Cambia completamente el sentido del código xDD.

Un Saludo!
De la API al IDE y del IDE a la API.
Avatar de Usuario
kaiser
 
Mensajes: 121
Registrado: Mié Nov 24, 2010 7:47 pm
Ubicación: Madrid (España)

Re: problema con python cuestion nº primos

Notapor alfredo23 » Dom Dic 12, 2010 10:57 pm

epa que despiste jaaj ya sient el molestart con esta tonterias y muchas gracias por todo tio.salu2
alfredo23
 
Mensajes: 12
Registrado: Jue Nov 04, 2010 8:49 pm

Re: problema con python cuestion nº primos

Notapor kaiser » Dom Dic 12, 2010 11:04 pm

De nada que para eso estamos, ni molestia ni tontería, todos hemos aprendido a programar alguna vez. A demás es bonito sudar un poco intentando sacar el código y cuando por fin lo ejecutas y todo funciona te sientes NINJA!

De todas formas yo investigaría un poco el código, según las normas de tabulación de python no es tan trivial que ese else esté ahí xDD.

Un Saludo!
De la API al IDE y del IDE a la API.
Avatar de Usuario
kaiser
 
Mensajes: 121
Registrado: Mié Nov 24, 2010 7:47 pm
Ubicación: Madrid (España)


Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado