<br><br><div class="gmail_quote">El 25 de noviembre de 2011 00:43, claudio canepa <span dir="ltr"><<a href="mailto:ccanepacc@gmail.com">ccanepacc@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br><br><div class="gmail_quote"><div class="im">2011/11/25 claudio canepa <span dir="ltr"><<a href="mailto:ccanepacc@gmail.com" target="_blank">ccanepacc@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br><br><div class="gmail_quote"><div>2011/11/24 Pablo M. Mana <span dir="ltr"><<a href="mailto:pablo.m.mana@gmail.com" target="_blank">pablo.m.mana@gmail.com</a>></span><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


El otro dia en la CDC/SoL Fisa comento que los compresores son un<div><div></div></div></blockquote></div></blockquote><div><br></div></div><div>[snip]</div><div class="im"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div>Asi que para funcionar habria que transformar la linea en </div></div></blockquote>

<div> 
 p1 = [ n for n in l2 if [l for l in range(2, int( pow( m, 0.5))) if n%l != 0 )] ]</div><div> </div></div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="gmail_quote"><div>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</div>
<div><br></div><div> 
 p1 = [ n for n in l2 if (l for l in range(2, int( pow( m, 0.5))) if n%l == 0 )]</div><div><br></div></div></blockquote><div><br></div></div><div>Ug, ahi me olvide la correccion anterior; queda</div><div class="im"><div>
      
p1 = [ n for n in l2 if [l for l in range(2, int( pow( m, 0.5))) if n%l == 0 )]
] </div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><div>Pienso que podes expresar esa linea mas claramente usando la funcion all(<iterable>) -> bool ; verdadera si todos los valores en el iterable son verdaderos.</div>


<div><br></div><div>Quedaria</div><div><br></div><div> 
 p1 = [ n for n in l2 if all(n%l != 0 for l in range(2, int( pow( m, 0.5))) ]
 </div><div><br></div><div>No criticos, pero ineficientes, es que hay un par de limites demasiado grandes.</div><div><br></div></div></blockquote><div><br></div></div><div>Ermmm.. el limite en la linea que venimos comentand si es critico: tiene que ser n , no m , o sea que queda</div>

<div><br></div><div> 
p1 = [ n for n in l2 if all(n%l != 0 for l in range(2, int( pow( n, 0.5))) ]
 </div><div class="im"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><div>Hay igual maneras mas eficientes de escribir una funcion asi, haciendo uso de que:</div>


<div><br></div><div>   - cuando avanzas hacia fin vos vas conociendo los primeros primos</div><div>   - p es primo si y solo si existe q primo, 1<q<sqrt(p) tal que q divide a p</div><div>Pero tenes que pensarlo antes de empezar a escribir codigo.</div>

<span><font color="#888888">
<div><br></div><div>--</div><div>claudio</div><div> </div></font></span></div>
</blockquote></div></div><font color="#888888"><div><br></div><div>--</div><div>claudio<br></div><div><br></div>
</font><br>_______________________________________________<br>
pyar mailing list <a href="mailto:pyar@python.org.ar">pyar@python.org.ar</a><br>
<a href="http://listas.python.org.ar/listinfo/pyar" target="_blank">http://listas.python.org.ar/listinfo/pyar</a><br>
<br>
PyAr - Python Argentina - Sitio web: <a href="http://www.python.org.ar/" target="_blank">http://www.python.org.ar/</a><br>
<br>
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - <a href="http://www.usla.org.ar" target="_blank">http://www.usla.org.ar</a><br></blockquote></div><br><br><br>Hola gente, pasaba por acá, vi luz y entré.<br>
<br>Como ya te han respondido sobre tu código dejo mi granito de arena respecto a los primos, con otro enfoque que puede tener el problema. Por lo que veo querés conocer los primos hasta cierto número y no si uno en particular lo es. En lugar de comprobar si un número es primo podés "cosecharlos".<br>
Al algoritmo le dicen "Criba de Eratóstenes". Del 2 para arriba te vas quedando con los primos y descartando los múltiplos que vas calculando. Por supuesto que mejor explicado esta en wikipedia ( aunque el código en python que figura creo que no funciona).<br>
<br>Dejo un ejemplo:<br><br><br>final = 100+1 # el +1 por el range() de abajo<br><br>lista_primos = [ True for n in range (0, final)] #genero una lista de booleanos todos verdaderos.<br><br>for m in range(2, final) :<br>    <br>
    if lista_primos[m]:<br>        <br>        print m, #imprimo los primos de a uno <br>        k=1<br>        while k*m < final:<br>            lista_primos[k*m]=False # sacode la lista los multiplos<br>            k+=1<br>
<br><br>Saludos.<br><br><br>