Buenas,
soy nuevo en el universo python y llevo un tiempo en esta lista y esta
pregunta me ha llamado la atención.
¿ Hay un modo "pythonico" de hacer las cosas ?
Viendo las soluciones solo veo algoritmos adaptados a las estructuras de
control de python.
¿ Es cosa mía o se me esta pasando algo ?

Saludos y feliz navidad!
 El 26/12/2012 14:21, "Daπid" <davidmen...@gmail.com> escribió:

> Por otro lado, el algoritmo se puede mejorar un poco. Hay métodos muy
> optimizados para calcular números primos, pero sin irnos a matemáticas
> superiores, podemos mejorar tu proceso. Un número es primo si y sólo
> si no es divisible exactamente por todos los números menores que él
> (sin contar el 1), y por tanto  si no es divisible exactamente por
> todos los primos menores que él (sin contar el 1). Por tanto, basta
> con que comprobemos sólo los números primos (que ya has calculado).
> Además, sabemos que los números pares no son primos, por lo que
> también nos los podemos saltar.
>
> Calculando todos los primos desde 2 hasta n tenemos (spoiler):
>
> http://pastebin.com/fMRH5xKK
>
> Este programa tarda 0.3 s en calcular los primos hasta 15 000, y 13 s
> en encontrar los 13 843 primos menores que 150 000. Tu versión tarda
> unos 3 segundos para el primer caso.
>
> El proceso se puede encapsular más. Podemos echar mano de la
> programación funcional y hacer que isprime devuelva por defecto True,
> salvo cuando vea que el número es compuesto, en cuyo caso devolverá
> False.
>
> http://pastebin.com/gnFrcpYC
>
> Con esto, hemos reducido el tiempo de cálculo a la mitad.
>
> He probado a considerar sólo los primos menores que la raíz cuadrada
> del número, pero en el cálculo de la raíz se tarda más que en lo que
> se ahorraría en divisiones. Este programa es un poco más rápido que el
> de MonoBOT.
>
> 2012/12/26 kausdiv <kaus...@gmail.com>:
> > Hola.
> > Estoy aprendiendo Python (me gusta muchisimo).
> > El problema que todo lo que escribo lo hago al estilo ceniano.  Es decir
> > tipo C o java, y quiero adentrarme al estilo pythoniano.
> > Por ejemplo este programita que busca los números primos entre 2 números
> > dados.
> > -------------------------------
> > def fprimos(n,x):
> >     l=[]
> >     for i in range(n,x):
> >         isprime=1
> >         for k in range(2,i):
> >             if i % k ==0 and i<>k:
> >                 isprime=0
> >                 break
> >         if isprime==1:
> >             l.append(i)
> >     return l
> >
> > def main():
> >     ok=1
> >     while ok==1:
> >         print " imprime numeros primos desde hasta."
> >         print " 0 = Salir "
> >         n1=raw_input("Valor inicial ")
> >         n2=raw_input("Valor Final ")
> >         n1=int(n1)
> >         n2=int(n2)
> >         if n1==0 or n2==0:
> >             ok=0
> >         else:
> >             print fprimos(n1,n2)
> >
> > main()
> >
> > ---------------------------------------
> > ¿ como sería el mismo programa pasado a estilo python ?
> >
> > Gracias amigos.
> > P.D.
> > No tengo ni idea de ingles como para leer la documentación. :-(
> > _______________________________________________
> > Python-es mailing list
> > Python-es@python.org
> > http://mail.python.org/mailman/listinfo/python-es
> > FAQ: http://python-es-faq.wikidot.com/
> _______________________________________________
> Python-es mailing list
> Python-es@python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a