<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Pablasso &#187; Proyecto Euler</title>
	<atom:link href="http://www.pablasso.com/category/proyecto-euler/feed" rel="self" type="application/rss+xml" />
	<link>http://www.pablasso.com</link>
	<description>Sobre desarrollo de software y ñoñadas</description>
	<lastBuildDate>Sun, 09 Oct 2011 19:25:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>El Proyecto Euler: Problema 6</title>
		<link>http://www.pablasso.com/2009/02/19/el-proyecto-euler-problema-6</link>
		<comments>http://www.pablasso.com/2009/02/19/el-proyecto-euler-problema-6#comments</comments>
		<pubDate>Thu, 19 Feb 2009 18:51:48 +0000</pubDate>
		<dc:creator>pablasso</dc:creator>
				<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyecto Euler]]></category>
		<category><![CDATA[euler]]></category>
		<category><![CDATA[problema 6]]></category>

		<guid isPermaLink="false">http://www.pablasso.com/?p=1202</guid>
		<description><![CDATA[El Proyecto Euler es una serie de problemas de programación, si quieres enterarte de que va esto, lee la introducción.
Problema 6

La suma de los cuadrados de los 10 primeros números naturales es,
1^(2) + 2^(2) + &#8230; + 10^(2) = 385
El cuadrado de la suma de los 10 primeros números naturales es,
(1 + 2 + &#8230; [...]]]></description>
			<content:encoded><![CDATA[<p>El <a href="http://projecteuler.net/">Proyecto Euler</a> es una serie de problemas de programación, si quieres enterarte de que va esto, lee <a href="http://www.pablasso.com/2008/05/18/el-proyecto-euler">la introducción</a>.</p>
<h2>Problema 6</h2>
<blockquote><p>
La suma de los cuadrados de los 10 primeros números naturales es,<br />
1^(2) + 2^(2) + &#8230; + 10^(2) = 385</p>
<p>El cuadrado de la suma de los 10 primeros números naturales es,<br />
(1 + 2 + &#8230; + 10)^(2) = 55^(2) = 3025</p>
<p>Por lo tanto la diferencia entre la suma de los cuadrados de los 10 primeros números naturales y el cuadrado de la suma es 3025 &#8211; 385 = 2640.</p>
<p>Encuentra la diferencia entre la suma de los cuadrados de los primeros 100 números naturales y el cuadrado de la suma.
</p></blockquote>
<p>Respuesta &#8220;programador ocioso&#8221;. Iteramos sobre 100 números tal cual dice el problema, primero calculando la suma de los cuadrados y enseguida el cuadrado de la suma.</p>
<p>Hacemos la resta final y listo.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="c"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#define LIMIT 100</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #993333;">int</span> i, sum <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span>, square <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span>;
&nbsp;
	<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span> i <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>; i &lt;<span style="color: #66cc66;">=</span> LIMIT; i<span style="color: #66cc66;">++</span> <span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#123;</span>
		sum <span style="color: #66cc66;">+=</span> i <span style="color: #66cc66;">*</span> i;
		square <span style="color: #66cc66;">+=</span> i;
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	square <span style="color: #66cc66;">*=</span> square;
&nbsp;
	<span style="color: #000066;">printf</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, square <span style="color: #66cc66;">-</span> sum<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<blockquote><p>Program exited with code #0 after 0.16 seconds.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.pablasso.com/2009/02/19/el-proyecto-euler-problema-6/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>El Proyecto Euler: Problema 5</title>
		<link>http://www.pablasso.com/2009/02/16/el-proyecto-euler-problema-5</link>
		<comments>http://www.pablasso.com/2009/02/16/el-proyecto-euler-problema-5#comments</comments>
		<pubDate>Mon, 16 Feb 2009 12:00:56 +0000</pubDate>
		<dc:creator>pablasso</dc:creator>
				<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyecto Euler]]></category>
		<category><![CDATA[euler]]></category>
		<category><![CDATA[problema 5]]></category>

		<guid isPermaLink="false">http://www.pablasso.com/?p=1169</guid>
		<description><![CDATA[El Proyecto Euler es una serie de problemas de programación, si quieres enterarte de que va esto, lee la introducción.
Problema 5
Espero que Michoacano y los señores de Kobol me pueda perdonar, pero seguiré con la regla de «un minuto» para llegar a los problemas retadores en que ya no es posible las soluciones de fuerza [...]]]></description>
			<content:encoded><![CDATA[<p>El <a href="http://projecteuler.net/">Proyecto Euler</a> es una serie de problemas de programación, si quieres enterarte de que va esto, lee <a href="http://www.pablasso.com/2008/05/18/el-proyecto-euler">la introducción</a>.</p>
<h2>Problema 5</h2>
<p>Espero que <a href="http://michoacano.com.mx/el-proyecto-euler-y-mis-recomendaciones/">Michoacano</a> y los señores de Kobol me pueda perdonar, pero seguiré con la regla de «un minuto» para llegar a los problemas retadores en que ya no es posible las soluciones de fuerza bruta. Los siguientes dos son sencillos de resolver sino te pones a tratar de optimizarlos, pero el 7 me llamó la atención porque trata de nuevo de números primos y ese si trataré de optimizarlo. En fin, les paso de rapidito las soluciones cochinas de 5 y 6.</p>
<blockquote><p>2520 es el número mas pequeño que puede ser dividido por cada uno de los números del 1 al 10 sin dejar residuos.</p>
<p>¿Cuál es el número mas pequeño perfectamente divisible -sin residuos- por todos los números del 1 al 20?
</p></blockquote>
<p>Como nos están pidiendo el mínimo común múltiplo de 20 números, la solución de fuerza bruta es bastante simple. Hacemos un bucle donde probamos número por número entre cada una de las opciones, si nos deja residuo entonces lo descartamos y vamos por el siguiente. Así hasta encontrar el indicado.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
</pre></td><td class="code"><pre class="c"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#define LIMIT 20</span>
&nbsp;
main<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #993333;">int</span> flag <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>, n <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>, i;
&nbsp;
	<span style="color: #b1b100;">while</span> <span style="color: #66cc66;">&#40;</span> flag <span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		n<span style="color: #66cc66;">++</span>;
&nbsp;
		<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span> i <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>; i &lt;<span style="color: #66cc66;">=</span> LIMIT; i<span style="color: #66cc66;">++</span> <span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #66cc66;">&#40;</span>n <span style="color: #66cc66;">%</span> i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">!=</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">break</span>;
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			flag <span style="color: #66cc66;">=</span> i <span style="color: #66cc66;">==</span> LIMIT ? <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">:</span> <span style="color: #cc66cc;">1</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #000066;">printf</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, n<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<h2>Mejoras</h2>
<p>Muchísimas.</p>
<p>Leí que se pueden sacar los factores primos de cada unos de los números de 1 al 20 y entonces el producto de ellos nos daría el resultado. Hacer eso sería una solución mucho -pero mucho- mas rápida y mejor que esta.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablasso.com/2009/02/16/el-proyecto-euler-problema-5/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>El Proyecto Euler: Problema 4</title>
		<link>http://www.pablasso.com/2009/02/06/el-proyecto-euler-problema-4</link>
		<comments>http://www.pablasso.com/2009/02/06/el-proyecto-euler-problema-4#comments</comments>
		<pubDate>Fri, 06 Feb 2009 12:00:15 +0000</pubDate>
		<dc:creator>pablasso</dc:creator>
				<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyecto Euler]]></category>
		<category><![CDATA[algoritmos]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[capicua]]></category>
		<category><![CDATA[euler]]></category>
		<category><![CDATA[problema 4]]></category>
		<category><![CDATA[projecto euler]]></category>

		<guid isPermaLink="false">http://www.pablasso.com/?p=1070</guid>
		<description><![CDATA[El Proyecto Euler es una serie de problemas de programación, si quieres enterarte de que va esto, lee la introducción.
Debo notar que he cambiado las reglas. Ahora me voy a preocupar mas por sacar la solución -menos cochina posible- que porque mi &#8220;algoritmo sea lo mas eficiente posible&#8221;. Esto es porque simplemente no me puedo [...]]]></description>
			<content:encoded><![CDATA[<p>El <a href="http://projecteuler.net/">Proyecto Euler</a> es una serie de problemas de programación, si quieres enterarte de que va esto, lee <a href="http://www.pablasso.com/2008/05/18/el-proyecto-euler">la introducción</a>.</p>
<p>Debo notar que he cambiado las <a href="http://www.pablasso.com/2008/05/18/el-proyecto-euler">reglas</a>. Ahora me voy a preocupar mas por sacar la solución -menos cochina posible- que porque mi &#8220;algoritmo sea lo mas eficiente posible&#8221;. Esto es porque simplemente no me puedo dar el tiempo para ello y quiero avanzar con los ejercicios algún día. Espero me ayuden en los comentarios a mejorar las soluciones :-)</p>
<h2>Problema 4</h2>
<blockquote><p>
Un número capicúa se lee de la misma manera en ambas direcciones. El capicúa mas grande resultante del producto de <strong>dos números</strong> de <strong>dos dígitos</strong> es 9009 = 91 x 99.</p>
<p>Encuentra el mayor capicúa resultante del producto de <strong>dos números</strong> de <strong>tres dígitos</strong>.
</p></blockquote>
<p>Aquí tenemos dos variables cuyo valor puede ir desde 100 hasta 999 -todos los números de 3 dígitos-, es un rango realmente pequeño así que iremos con el viejo y sucio conocido método de <a href="http://es.wikipedia.org/wiki/B%C3%BAsqueda_de_fuerza_bruta">fuerza bruta</a> y probaremos cada una de las opciones.</p>
<p>Es decir; Un par de bucles para probar que cada resultado de las multiplicaciones de números de 3 dígitos, sea o no un número capicúa. Si el resultado es positivo entonces verificamos que sea el más grande que hemos encontrado hasta el momento y lo guardamos.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="c">main<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #993333;">int</span> i, j, x, r <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span>;
&nbsp;
	<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span> i <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">999</span>; i &gt; <span style="color: #cc66cc;">99</span>; i<span style="color: #66cc66;">--</span> <span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span> j <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">999</span>; j &gt; <span style="color: #cc66cc;">99</span>; j<span style="color: #66cc66;">--</span> <span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			x <span style="color: #66cc66;">=</span> i <span style="color: #66cc66;">*</span> j;
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> is_palindrome<span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				r <span style="color: #66cc66;">=</span> x &gt; r ? x <span style="color: #66cc66;">:</span> r;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #000066;">printf</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;%d&quot;</span>, r<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Para la función que verifica que el número sea capicúa podemos asumir -debo decir, suciamente- que el resultado que buscamos va a estar compuesto de 6 dígitos, así que nuestro objetivo sera descomponer el número a probar en un arreglo que tenga 6 elementos.</p>
<p>A notar que con la operación <a href="http://en.wikipedia.org/wiki/Modulo_operation">mod</a> 10 podemos tomar el último dígito de un número y haciendo una división sobre 10 podemos eliminar dicho dígito del número, porque ya lo hemos guardado.</p>
<p>Al ya tener los 6 dígitos guardados podemos comparar cada uno de los índices opuestos para ver que sean iguales.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
</pre></td><td class="code"><pre class="c"><span style="color: #993333;">int</span> is_palindrome<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span> number<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #993333;">int</span> i <span style="color: #66cc66;">=</span> MAX <span style="color: #66cc66;">-</span> <span style="color: #cc66cc;">1</span>, digits<span style="color: #66cc66;">&#91;</span>MAX<span style="color: #66cc66;">&#93;</span>;
&nbsp;
	<span style="color: #b1b100;">while</span> <span style="color: #66cc66;">&#40;</span> i &gt;<span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		digits<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> number <span style="color: #66cc66;">%</span> <span style="color: #cc66cc;">10</span>;
		number <span style="color: #66cc66;">=</span> number <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">10</span>;
		i<span style="color: #66cc66;">--</span>;
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> digits<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">!=</span> digits<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#93;</span> || digits<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">!=</span> digits<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#93;</span> || digits<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">!=</span> digits<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">1</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Voila! Esto ya resuelve nuestro problema y lo hace en un tiempo razonable. Pero.. siempre hay un pero..</p>
<p>Si te sientes sucio utilizando una función que depende de que nuestro número contenga exactamente 6 dígitos, entonces podemos sustituirla por una función que simplemente toma un numero y lo devuelve al revés para poder checarlo directamente con el original.</p>
<p>Esta función se basa en el mismo principio que utilizamos antes con el operador mod y las divisiones. Extraer y eliminar el último dígito, solo que ahora lo vamos acumulando en otra variable -agregando nuevos dígitos al multiplicar por 10- para regresarlo de revés.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>21
22
23
24
25
26
27
28
29
30
31
32
33
</pre></td><td class="code"><pre class="c"><span style="color: #993333;">int</span> reversed<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span> number<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #993333;">int</span> reversed <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span>;
&nbsp;
	<span style="color: #b1b100;">while</span> <span style="color: #66cc66;">&#40;</span>number &gt; <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		 reversed <span style="color: #66cc66;">=</span> reversed <span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">10</span>;
		 reversed <span style="color: #66cc66;">=</span> reversed <span style="color: #66cc66;">+</span> number <span style="color: #66cc66;">%</span> <span style="color: #cc66cc;">10</span>;
		 number <span style="color: #66cc66;">=</span> number <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">10</span>;
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">return</span> reversed;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Y entonces podemos sustituir la llamada de la <code>is_palindrome</code> por <code>reversed</code></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>11
12
13
</pre></td><td class="code"><pre class="c">			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> reversed<span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">==</span> x <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				r <span style="color: #66cc66;">=</span> x &gt; r ? x <span style="color: #66cc66;">:</span> r;
			<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>La primera función es un poco más rápida, pero la diferencia son apenas un par de milésimas. Ambas me parece que terminan en un tiempo aceptable.</p>
<blockquote><p>
real	0m0.070s<br />
user	0m0.068s<br />
sys	0m0.008s
</p></blockquote>
<h2>Mejoras</h2>
<p>Creo que el mayor problema con esta solución es el bucle a fuerza bruta, no es necesario probar cada combinación ya que por lo menos creo que dos cosas se deben de poder evitar:</p>
<ol>
<li>No repetir multiplicaciones. 999 x 555 = 555 x 999. <strong>Actualización:</strong> Victor Bracco ayudó con esta solución en los comentarios, los tiempos de ejecución se cortan por la mitad :-)</li>
<li>Se deberían de evitar las multiplicaciones de números en que ambas variables sean con números bajos. Con solo calcular cual es la mínima combinación que nos resulta en productos de 6 dígitos nos evitaría operaciones innecesarias. <strong>Actualización:</strong> Victor dio con esta solución también, con ambas mejoras el programa tarda apenas 0.002s :-)</li>
</ol>
<p><strong>Actualización:</strong> Victor dio ahora una solución que mejora los ciclos externos necesitados :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablasso.com/2009/02/06/el-proyecto-euler-problema-4/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>El Proyecto Euler: Problema 3</title>
		<link>http://www.pablasso.com/2008/10/06/el-proyecto-euler-problema-3</link>
		<comments>http://www.pablasso.com/2008/10/06/el-proyecto-euler-problema-3#comments</comments>
		<pubDate>Tue, 07 Oct 2008 02:45:14 +0000</pubDate>
		<dc:creator>pablasso</dc:creator>
				<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyecto Euler]]></category>

		<guid isPermaLink="false">http://www.pablasso.com/?p=518</guid>
		<description><![CDATA[El Proyecto Euler es una serie de problemas de programación, si quieres enterarte de que va esto, lee la introducción.
Problema 3

Los factores primos de 13195 son 5, 7, 13 y 29.
¿Cual es el factor primo mas grande del número 600851475143?

Los factores primos de un entero positivo, son los números primos que dividen a ese entero [...]]]></description>
			<content:encoded><![CDATA[<p>El <a href="http://projecteuler.net/">Proyecto Euler</a> es una serie de problemas de programación, si quieres enterarte de que va esto, lee <a href="http://www.pablasso.com/2008/05/18/el-proyecto-euler">la introducción</a>.</p>
<h2>Problema 3</h2>
<blockquote><p>
Los factores primos de 13195 son 5, 7, 13 y 29.</p>
<p>¿Cual es el factor primo mas grande del número 600851475143?
</p></blockquote>
<p>Los <a href="http://es.wikipedia.org/wiki/Factor_primo">factores primos</a> de un entero positivo, son los números primos que dividen a ese entero exactamente, es decir, sin dejar residuos. Este problema es comúnmente utilizado para criptografía, ya que con los métodos matemáticos y poder de computo que tenemos actualmente no es posible desencriptar llaves grandes en un tiempo razonablemente practico (decenas de años, miles de años, etc).</p>
<p>Una forma de resolver este problema es con un bucle que se vaya dividiendo el número deseado <em>&#8220;x&#8221;</em> entre números primos, cuando tiene un resultado sin residuo entonces <em>&#8220;x&#8221;</em> toma ese valor.</p>
<p>Conforme avanzamos ciclos<em> &#8220;x&#8221;</em> se va reduciendo y nuestro bucle lo va alcanzando. Cuando se alcanzan, eso indica nuestro factor primo mas grande.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="c"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
&nbsp;
main<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #993333;">long</span> <span style="color: #993333;">long</span> i, num <span style="color: #66cc66;">=</span> 600851475143LL;
&nbsp;
    <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span>i <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">3</span>; i <span style="color: #66cc66;">!=</span> num; i <span style="color: #66cc66;">+=</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>num <span style="color: #66cc66;">%</span> i <span style="color: #66cc66;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
            num <span style="color: #66cc66;">=</span> num <span style="color: #66cc66;">/</span> i;
        <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #000066;">printf</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;El resultado es %d&quot;</span>, num<span style="color: #66cc66;">&#41;</span>;
    <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Si bien esto hace mas de tres mil entradas al bucle, es suficientemente eficiente para terminar en 1 milisegundo, lo que me parece razonable si estamos hablando de calcular para un número del orden 10^11 (cientos de miles de millones).</p>
<blockquote><p>
$ time ./003<br />
El resultado es 6857<br />
real	0m0.001s<br />
user	0m0.000s<br />
sys	0m0.000s
</p></blockquote>
<p>Hay muchos métodos de factorización modernos que son una gran mejora a los viejos métodos de <a href="http://en.wikipedia.org/wiki/Fermat%27s_factorization_method">factorización de Fermat</a> y son bastante buenos en números de orden de magnitud mayores al que vimos, como el algoritmo <a href="http://en.wikipedia.org/wiki/Pollard%27s_rho_algorithm">rho de Pollard</a>, <a href="http://en.wikipedia.org/wiki/Quadratic_sieve">Quadratic sieve</a> o <a href="http://en.wikipedia.org/wiki/General_number_field_sieve">General number field sieve</a>. (Lo primero que intente fue utilizar el rho de Pollard, pero me estaba costando <del datetime="2008-10-07T02:33:20+00:00">un hue</del> mucho tiempo hacerlo en C).</p>
<p>Así que si tienes que trabajar sobre números enormes, te vendría bien utilizar uno de estos algoritmos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablasso.com/2008/10/06/el-proyecto-euler-problema-3/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>El Proyecto Euler: Problema 2</title>
		<link>http://www.pablasso.com/2008/05/22/el-proyecto-euler-problema-2</link>
		<comments>http://www.pablasso.com/2008/05/22/el-proyecto-euler-problema-2#comments</comments>
		<pubDate>Thu, 22 May 2008 21:20:39 +0000</pubDate>
		<dc:creator>pablasso</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyecto Euler]]></category>
		<category><![CDATA[c]]></category>

		<guid isPermaLink="false">http://www.pablasso.com/?p=448</guid>
		<description><![CDATA[El Proyecto Euler es una serie de problemas de programación, si quieres enterarte de que va esto, lee la introducción.
Problema 2

Cada nuevo termino en la secuencia de Fibonacci es generada agregando los dos términos previos. Comenzando con 1 y 2, los primeros 10 términos serán:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, &#8230;
Encuentra [...]]]></description>
			<content:encoded><![CDATA[<p>El <a href="http://projecteuler.net/">Proyecto Euler</a> es una serie de problemas de programación, si quieres enterarte de que va esto, lee <a href="http://www.pablasso.com/2008/05/18/el-proyecto-euler">la introducción</a>.</p>
<h2>Problema 2</h2>
<blockquote><p>
Cada nuevo termino en la secuencia de <a href="http://es.wikipedia.org/wiki/Sucesi%C3%B3n_de_Fibonacci">Fibonacci</a> es generada agregando los dos términos previos. Comenzando con 1 y 2, los primeros 10 términos serán:</p>
<p>1, 2, 3, 5, 8, 13, 21, 34, 55, 89, &#8230;</p>
<p>Encuentra la suma de todos los términos pares en una secuencia que no sobrepase los 4 millones.
</p></blockquote>
<p>Para resolverlo de la forma <em>bruta</em>, hay que construir la secuencia de Fibonnaci solamente agregando una condición donde vamos agregando una sumatoria de los números pares, esa verificación es donde muy probablemente se pueda optimizar esto. Mañana salgo de viaje, hasta fines de la siguiente semana revisare que se pudo hacer.</p>
<p>Por cierto, hubiera jurado que el problema antes estaba escrito con el límite de 1 millón, así tenía guardada la solución, me pregunto ¿porque lo habrán cambiado? por lo pronto el siguiente que haga sera completamente nuevo, los dos primeros ya los había resuelto cuando me registre a la página.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="c"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
&nbsp;
main<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #993333;">int</span> sum <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span>, a <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>, b <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>, c <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span>;
    <span style="color: #b1b100;">while</span> <span style="color: #66cc66;">&#40;</span> c &lt; <span style="color: #cc66cc;">4000000</span> <span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        c <span style="color: #66cc66;">=</span> a <span style="color: #66cc66;">+</span> b;
        a <span style="color: #66cc66;">=</span> b;
        b <span style="color: #66cc66;">=</span> c;
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> c <span style="color: #66cc66;">%</span> <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">==</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
            sum <span style="color: #66cc66;">+=</span> c;
        <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #000066;">printf</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;resultado: %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, sum<span style="color: #66cc66;">&#41;</span>;
    <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<h2>Conclusión</h2>
<p>Lo mas costoso de esta solución es la comprobación de que los números sean pares, y revisando otras soluciones hay muchas formas de evitar esta comprobación.</p>
<p>Como bien notaron Michoacano y Xiam, resulta que si revisamos la secuencia, podemos notar que cada tercer número es par y ya sabiéndolo de antemano nos podemos evitar la comprobación y sumar solo cada tercer número.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="c"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
&nbsp;
main<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #993333;">int</span> sum <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span>, a <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>, b <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>, c <span style="color: #66cc66;">=</span> a <span style="color: #66cc66;">+</span> b;
    <span style="color: #b1b100;">while</span> <span style="color: #66cc66;">&#40;</span> c &lt; <span style="color: #cc66cc;">4000000</span> <span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        sum <span style="color: #66cc66;">+=</span> c;
        a <span style="color: #66cc66;">=</span> b <span style="color: #66cc66;">+</span> c;
        b <span style="color: #66cc66;">=</span> c <span style="color: #66cc66;">+</span> a;
        c <span style="color: #66cc66;">=</span> a <span style="color: #66cc66;">+</span> b;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #000066;">printf</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;resultado: %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, sum<span style="color: #66cc66;">&#41;</span>;
    <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Nuevamente, esto ayudara realmente en rangos mucho mas grandes que el que tenemos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablasso.com/2008/05/22/el-proyecto-euler-problema-2/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>El Proyecto Euler: Problema 1</title>
		<link>http://www.pablasso.com/2008/05/18/el-proyecto-euler-problema-1</link>
		<comments>http://www.pablasso.com/2008/05/18/el-proyecto-euler-problema-1#comments</comments>
		<pubDate>Sun, 18 May 2008 23:16:15 +0000</pubDate>
		<dc:creator>pablasso</dc:creator>
				<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyecto Euler]]></category>
		<category><![CDATA[c]]></category>

		<guid isPermaLink="false">http://www.pablasso.com/?p=447</guid>
		<description><![CDATA[El Proyecto Euler es una serie de problemas de programación, si quieres enterarte de que va esto, lee la introducción.
Problema 1
Si listamos todos los números naturales debajo de 10 que son múltiplos de 3 o 5, tenemos 3, 5, 6 y 9. La suma de estos múltiplos es 23.
Encuentra la suma de todos los múltiplos [...]]]></description>
			<content:encoded><![CDATA[<p>El <a href="http://projecteuler.net/">Proyecto Euler</a> es una serie de problemas de programación, si quieres enterarte de que va esto, lee <a href="http://www.pablasso.com/2008/05/18/el-proyecto-euler">la introducción</a>.</p>
<h2>Problema 1</h2>
<blockquote><p>Si listamos todos los números naturales debajo de 10 que son múltiplos de 3 o 5, tenemos 3, 5, 6 y 9. La suma de estos múltiplos es 23.</p>
<p>Encuentra la suma de todos los múltiplos de 3 o 5 debajo de 1000.</p></blockquote>
<p>Este problema lo he visto como de los &#8216;recomendados&#8217; para poner en las entrevistas para trabajo, simple y rápido, te dice claramente las 3 condiciones a evaluar.</p>
<p>El operador % regresa el residuo de una división, por lo que podemos iterar de uno en uno hasta el límite superior (1000) y verificar si cada número es perfectamente divisible (el residuo es 0) entre 3 o 5, entonces lo podemos almacenar.</p>
<p>Resuelto en C.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="c"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
&nbsp;
main<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #993333;">int</span> sum <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span>, i;
    <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span> i <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>; i &lt; <span style="color: #cc66cc;">1000</span>; i<span style="color: #66cc66;">++</span> <span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #66cc66;">&#40;</span>i <span style="color: #66cc66;">%</span> <span style="color: #cc66cc;">3</span> <span style="color: #66cc66;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> || <span style="color: #66cc66;">&#40;</span>i <span style="color: #66cc66;">%</span> <span style="color: #cc66cc;">5</span> <span style="color: #66cc66;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
            sum <span style="color: #66cc66;">+=</span> i;
        <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #000066;">printf</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;El resultado es: %d&quot;</span>, sum<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<h2>Conclusión</h2>
<p>Comparando con resultados del Proyecto Euler, si bien la solución de <em>fuerza bruta</em> que hice no esta mal, si la pregunta exigiera un limite con cantidades grandes no es eficiente hacer un loop comparando resultado por resultado, sino que es mejor calcular las operaciones por separado. </p>
<p>La suma de números divisibles por 3, la suma de números divisibles por 5 y restando finalmente los números divisibles por 15 que sino tendríamos los divisibles comunes de 3 y 5 contados 2 veces. Se puede evadir por completo cualquier loop si utilizamos <a href="http://es.wikipedia.org/wiki/Progresi%C3%B3n_aritm%C3%A9tica">progresiones aritméticas</a>.</p>
<p>Para poner un poco en contraste, haciendo benchmark (utilizando gprof) de mi solución para el limite de 1 billón (si si, un uno seguido de 9 ceros), este laptop tarda 15.68 segundos.</p>
<p>En cambio la siguiente versión (versión de sandippal en el foro) que utiliza este principio, tarda menos de .01 segundo, ¿bastante no?.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="c"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#define NUM 999999999</span>
&nbsp;
main<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
  <span style="color: #993333;">unsigned</span> <span style="color: #993333;">long</span> <span style="color: #993333;">long</span> mult3  <span style="color: #66cc66;">=</span> NUM <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">3</span>;
  <span style="color: #993333;">unsigned</span> <span style="color: #993333;">long</span> <span style="color: #993333;">long</span> mult5  <span style="color: #66cc66;">=</span> NUM <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">5</span>;
  <span style="color: #993333;">unsigned</span> <span style="color: #993333;">long</span> <span style="color: #993333;">long</span> mult15 <span style="color: #66cc66;">=</span> NUM <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">15</span>;
  <span style="color: #993333;">unsigned</span> <span style="color: #993333;">long</span> <span style="color: #993333;">long</span> sum3, sum5, sum15;
&nbsp;
  sum3 <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">3</span>  <span style="color: #66cc66;">*</span> mult3  <span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span>mult3 <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">2</span>;
  sum5 <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">5</span>  <span style="color: #66cc66;">*</span> mult5  <span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span>mult5 <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">2</span>;
  sum15 <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">15</span> <span style="color: #66cc66;">*</span> mult15 <span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span>mult15 <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">2</span>;
&nbsp;
  <span style="color: #000066;">printf</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;resultado: %lld<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, sum3 <span style="color: #66cc66;">+</span> sum5 <span style="color: #66cc66;">-</span> sum15<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Gracias en especial al comentario de Xiam, grande su explicación.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablasso.com/2008/05/18/el-proyecto-euler-problema-1/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>El Proyecto Euler</title>
		<link>http://www.pablasso.com/2008/05/18/el-proyecto-euler</link>
		<comments>http://www.pablasso.com/2008/05/18/el-proyecto-euler#comments</comments>
		<pubDate>Sun, 18 May 2008 22:51:46 +0000</pubDate>
		<dc:creator>pablasso</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyecto Euler]]></category>

		<guid isPermaLink="false">http://www.pablasso.com/?p=446</guid>
		<description><![CDATA[¿Que es el Proyecto Euler?
El Proyecto Euler es una serie de retadores problemas de matemática/programación que requerirán mas que un poco de conocimientos de matemáticas para resolver. Aunque las matemáticas te ayudarán a tener métodos elegantes y eficientes, el uso de la computadora y habilidades de programación son requeridos para resolver la mayoría de los [...]]]></description>
			<content:encoded><![CDATA[<p>¿Que es el <a href="http://projecteuler.net">Proyecto Euler</a>?</p>
<blockquote><p>El Proyecto Euler es una serie de retadores problemas de matemática/programación que requerirán mas que un poco de conocimientos de matemáticas para resolver. Aunque las matemáticas te ayudarán a tener métodos elegantes y eficientes, el uso de la computadora y habilidades de programación son requeridos para resolver la mayoría de los problemas.</p></blockquote>
<p>Desde hace tiempo he querido avanzar con ellos y mi desidia no me ha dejado, así que ahora publicaré los problemas que vaya resolviendo (si, uno por uno) y de paso me doy motivación extra.</p>
<p>También es una perfecta oportunidad para que la vasta fauna del internet pueda corregir mi imperfecta manera de programar, así que cualquier corrección no duden en hacerla, mientras mas me equivoco mas aprendo.</p>
<p>Algunas cosas que notar:</p>
<ul>
<li>Siempre agradeceré que revisen el problema y den su opinión, <strong>planeo equivocarme</strong> bastante. Los problemas se encuentran si buscamos en el <em>internets</em> o en la página del proyecto, pero el punto es pensar un poco y hacerlo uno mismo, lo demás es perder el tiempo.</li>
<li><del datetime="2009-02-06T06:36:27+00:00">Siempre buscare que el programa sea mas eficiente, y por eficiente se entiende que el algoritmo ejecute en menos ciclos de maquina, por lo tanto en menos tiempo.</del></li>
<li>He notado que no puedo darme el lujo de tardar cuatro veces mas resolviendo algo por intentar hacerlo lo mas eficiente posible, así que ahora voy a preocuparme menos por el rendimiento y mas por la respuesta basándome en la «<a href="http://projecteuler.net/index.php?section=about">regla de un minuto</a>» del mismo proyecto euler, un programa siempre debe de tardar <strong>menos de un minuto en ejecución</strong>, otro caso es inaceptable. Esto es porque necesito aprovechar mejor mi tiempo, espero que me ayuden en los comentarios a mejorar las soluciones.</li>
<li>Siempre preferiré <strong>código legible</strong> que escribir en el menor número de lineas ininteligibles posible.</li>
<li>Los quiero hacer todos en C -ANSI C99- para aprender, así tarde tres veces más y cometa muchos errores como <em>n00b</em> que soy, no me importa, desde la carrera técnica no lo utilizo y ya dan ganas :-)</li>
<li>Si planeas hacerlos por tu cuenta, no leas esto antes! básicamente es un <strong>spoiler</strong>.</li>
</ul>
<h2>Listado de problemas:</h2>
<ul>
<li><a href="http://www.pablasso.com/2008/05/18/el-proyecto-euler-problema-1">Problema 1</a> &#8211; Suma todos los números naturales menores a 1000 que son múltiplos de 3 o 5.</li>
<li><a href="http://www.pablasso.com/2008/05/22/el-proyecto-euler-problema-2">Problema 2</a> &#8211; Encuentra la suma de todos los números pares en una secuencia de Fibonacci que no pase los 4 millones.</li>
<li><a href="http://www.pablasso.com/2008/10/06/el-proyecto-euler-problema-3">Problema 3</a> &#8211; Encuentra el factor primo mas grande de un número compuesto.</li>
<li><a href="http://www.pablasso.com/2009/02/06/el-proyecto-euler-problema-4">Problema 4</a> &#8211; Encuentra el mayor producto capicúa de dos números de tres dígitos.</li>
<li><a href="http://www.pablasso.com/2009/02/16/el-proyecto-euler-problema-5">Problema 5</a> &#8211; ¿Cuál es el número mas pequeño divisible por cada uno de los números del 1 al 20?</li>
<li><a href="http://www.pablasso.com/2009/02/19/el-proyecto-euler-problema-6">Problema 6</a> &#8211; ¿Cuál es la diferencia entre la suma de los cuadrados y el cuadrado de las sumas?</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.pablasso.com/2008/05/18/el-proyecto-euler/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

