[pyar] Numeros primos

claudio canepa ccanepacc en gmail.com
Vie Nov 25 00:43:32 ART 2011


2011/11/25 claudio canepa <ccanepacc en gmail.com>

>
>
> 2011/11/24 Pablo M. Mana <pablo.m.mana en gmail.com>
>
>> El otro dia en la CDC/SoL Fisa comento que los compresores son un
>>
>
[snip]


> Asi que para funcionar habria que transformar la linea en
>>
>    p1 = [ n for n in l2 if [l for l in range(2, int( pow( m, 0.5))) if n%l
> != 0 )] ]
>
>
por otro lado, la lista interna que queres calcular deberia acumular los
> valores que dividen n, asi que la ultima condicion no deberia estar negada,
> te quedaria
>
>    p1 = [ n for n in l2 if (l for l in range(2, int( pow( m, 0.5))) if n%l
> == 0 )]
>
>
Ug, ahi me olvide la correccion anterior; queda
       p1 = [ n for n in l2 if [l for l in range(2, int( pow( m, 0.5))) if
n%l == 0 )] ]



> Pienso que podes expresar esa linea mas claramente usando la funcion
> all(<iterable>) -> bool ; verdadera si todos los valores en el iterable son
> verdaderos.
>
> Quedaria
>
>    p1 = [ n for n in l2 if all(n%l != 0 for l in range(2, int( pow( m,
> 0.5))) ]
>
> No criticos, pero ineficientes, es que hay un par de limites demasiado
> grandes.
>
>
Ermmm.. el limite en la linea que venimos comentand si es critico: tiene
que ser n , no m , o sea que queda

  p1 = [ n for n in l2 if all(n%l != 0 for l in range(2, int( pow( n,
0.5))) ]


> Hay igual maneras mas eficientes de escribir una funcion asi, haciendo uso
> de que:
>
>    - cuando avanzas hacia fin vos vas conociendo los primeros primos
>    - p es primo si y solo si existe q primo, 1<q<sqrt(p) tal que q divide
> a p
> Pero tenes que pensarlo antes de empezar a escribir codigo.
>
> --
> claudio
>
>

--
claudio
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20111125/a1df1287/attachment.html>


More information about the pyar mailing list