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/