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/