[pyar] Soy novato y tengo dudas con los bucles en python.

Adrian Roldan roldanadrian en gmail.com
Lun Nov 21 09:12:26 ART 2011


El 21 de noviembre de 2011 05:05, Walter R. Ojeda Valiente <
wojedav en gmail.com> escribió:

> Alejandro, sólo una pequeña corrección: no hace falta recorrer desde 2
> hasta la (raíz cuadrada de N) + 1.
>
> Con recorrer desde 2 hasta la (raíz cuadrada de N) será suficiente, no es
> necesario sumarle ese 1.
>
> Si a alguien le interesa la demostración del por qué, se lo puedo explicar.
>
> Saludos.
>
> Walter.
>
>
>
>
> 2011/11/21 Alejandro Santos <listas en alejolp.com>
>
>> 2011/11/21 Javier Marín <nano.world.contact en gmail.com>:
>> >
>> > La cosa es simple, si mi mi número es más de dos veces divisible entre
>> otros
>> > números, no es primo.
>> > Mil gracias... ahora, ese código funciona pero... ¿Podría ser más
>> > eficiente?
>> >
>>
>> Algo que podés hacer para que sea más eficiente es, en vez de recorrer
>> los números desde el 2 hasta el N-1, podés recorrer desde el 2 hasta
>> la (raíz cuadrada del N) + 1.
>>
>> Para calcular la raiz cuadrada de un numero tenés que usar la función
>> sqrt del módulo math. Por ejemplo:
>>
>>    import math
>>    raiz = math.sqrt(66)
>>
>> La función sqrt(x) devuelve un numero en punto flotante. Si querés
>> usar el resultado con la funcion range deberías convertir el resultado
>> a un entero (perdiendo los decimales después de la coma). Ejemplo:
>>
>>    import math
>>    raiz = int( math.sqrt(66) )
>>
>> El resultado de sqrt(66) es 8.124, y cuando lo convertís a un entero
>> con la función int(x) devuelve 8.
>>
>> --
>> Alejandro Santos
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
>
>
> --
> Hay 10 clases de personas. Las que conocen aritmética binaria y las que no.
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>


Walter,  es cierto lo que decís, que hace falta  mirar si existen divisores
hasta la raíz de n para saber si n es primo.
Pero también es cierto que que el +1 es necesario para que el bucle haga la
prueba hasta la raíz de n inclusive.

Si haces esto:

import math
n=25
p = 0
for k in xrange(2,int( math.sqrt(n))):

    print k
    p = 1 if n % k != 0 else 0

print " es primo" if p > 0 else  "no es primo"

te da que 25 es primo porque porque k llega hasta 4

en cambio si haces:


import math
n=25
p = 0
for k in xrange(2,int( math.sqrt(n)+1)):

    print k
    p = 1 if n % k != 0 else 0

print " es primo" if p > 0 else  "no es primo"

Te da que 25 no es primo, como debe ser.

De paso lo pongo de esta manera para que Javier vea como usar el if como
ternario.

Saludos, Adrián
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20111121/98751bf1/attachment.html>


More information about the pyar mailing list