<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comentarios en: El Proyecto Euler: Problema 1</title>
	<atom:link href="http://www.pablasso.com/2008/05/18/el-proyecto-euler-problema-1/feed" rel="self" type="application/rss+xml" />
	<link>http://www.pablasso.com/2008/05/18/el-proyecto-euler-problema-1</link>
	<description>Blog de Juan Pablo Ortiz Aréchiga</description>
	<pubDate>Thu, 20 Nov 2008 10:01:08 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>Por: pablasso</title>
		<link>http://www.pablasso.com/2008/05/18/el-proyecto-euler-problema-1#comment-43688</link>
		<dc:creator>pablasso</dc:creator>
		<pubDate>Sun, 15 Jun 2008 12:21:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.pablasso.com/?p=447#comment-43688</guid>
		<description>Gracias Geranio!</description>
		<content:encoded><![CDATA[<p>Gracias Geranio!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Geranio Bigotes</title>
		<link>http://www.pablasso.com/2008/05/18/el-proyecto-euler-problema-1#comment-43675</link>
		<dc:creator>Geranio Bigotes</dc:creator>
		<pubDate>Fri, 13 Jun 2008 23:21:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.pablasso.com/?p=447#comment-43675</guid>
		<description>Otra respuesta al problema en python, usando comprensión de listas, espero que les resulte interesante tb.


&lt;pre lang="python"&gt;sum([n for n in range(1,1000) if n % 3 == 0 or n % 5 == 0])&lt;/pre&gt;


Eso es todo :P, bien cortito... Saludos!</description>
		<content:encoded><![CDATA[<p>Otra respuesta al problema en python, usando comprensión de listas, espero que les resulte interesante tb.</p>

<div class="wp_syntax"><div class="code"><pre class="python"><span style="color: #008000;">sum</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>n <span style="color: #ff7700;font-weight:bold;">for</span> n <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">1000</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">if</span> n <span style="color: #66cc66;">%</span> <span style="color: #ff4500;">3</span> == <span style="color: #ff4500;">0</span> <span style="color: #ff7700;font-weight:bold;">or</span> n <span style="color: #66cc66;">%</span> <span style="color: #ff4500;">5</span> == <span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Eso es todo :P, bien cortito&#8230; Saludos!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: pablasso</title>
		<link>http://www.pablasso.com/2008/05/18/el-proyecto-euler-problema-1#comment-43577</link>
		<dc:creator>pablasso</dc:creator>
		<pubDate>Wed, 21 May 2008 22:36:22 +0000</pubDate>
		<guid isPermaLink="false">http://www.pablasso.com/?p=447#comment-43577</guid>
		<description>Es C no C++.

No hay necesidad de ponerse como anónimo, precisamente esa es una de las motivaciones, desde clases en el TSU (unos 6 años) que no toco C y ese es uno de los propósitos, que se me quite lo wey. No me ofendo shinga :-)</description>
		<content:encoded><![CDATA[<p>Es C no C++.</p>
<p>No hay necesidad de ponerse como anónimo, precisamente esa es una de las motivaciones, desde clases en el TSU (unos 6 años) que no toco C y ese es uno de los propósitos, que se me quite lo wey. No me ofendo shinga :-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: RalPh</title>
		<link>http://www.pablasso.com/2008/05/18/el-proyecto-euler-problema-1#comment-43576</link>
		<dc:creator>RalPh</dc:creator>
		<pubDate>Wed, 21 May 2008 22:24:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.pablasso.com/?p=447#comment-43576</guid>
		<description>jajaja, acaso apenas vas empesando con C++?
Eso es de rutina prima semanal</description>
		<content:encoded><![CDATA[<p>jajaja, acaso apenas vas empesando con C++?<br />
Eso es de rutina prima semanal</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: pablasso</title>
		<link>http://www.pablasso.com/2008/05/18/el-proyecto-euler-problema-1#comment-43574</link>
		<dc:creator>pablasso</dc:creator>
		<pubDate>Wed, 21 May 2008 22:04:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.pablasso.com/?p=447#comment-43574</guid>
		<description>@Michoacano Tienes mucha razón, se itera mucho menos haciéndolo por partes y en rangos grandes si que valdrá la pena. A la próxima no te guardes la formula, en los concursos todo se vale mientras llegues al resultado ;-)

@dmind Gracias! siempre es interesante verlo en otros lenguajes

@xiam Me gusto mucho tu forma de resolver el problema y mucho mas tu forma de explicarlo, gracias por tomarte el tiempo

@Yeru Fáciles y difíciles, ahí vamos de uno en uno :-)

@Jesús .. Webón ¬¬</description>
		<content:encoded><![CDATA[<p>@Michoacano Tienes mucha razón, se itera mucho menos haciéndolo por partes y en rangos grandes si que valdrá la pena. A la próxima no te guardes la formula, en los concursos todo se vale mientras llegues al resultado ;-)</p>
<p>@dmind Gracias! siempre es interesante verlo en otros lenguajes</p>
<p>@xiam Me gusto mucho tu forma de resolver el problema y mucho mas tu forma de explicarlo, gracias por tomarte el tiempo</p>
<p>@Yeru Fáciles y difíciles, ahí vamos de uno en uno :-)</p>
<p>@Jesús .. Webón ¬¬</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Jesús</title>
		<link>http://www.pablasso.com/2008/05/18/el-proyecto-euler-problema-1#comment-43571</link>
		<dc:creator>Jesús</dc:creator>
		<pubDate>Wed, 21 May 2008 16:15:07 +0000</pubDate>
		<guid isPermaLink="false">http://www.pablasso.com/?p=447#comment-43571</guid>
		<description>mira tú, que interesante, me pondré a resolverlos... pero este ya no vale porque ya lo resolviste así que mejor lo copypasteo ñ_ñ</description>
		<content:encoded><![CDATA[<p>mira tú, que interesante, me pondré a resolverlos&#8230; pero este ya no vale porque ya lo resolviste así que mejor lo copypasteo ñ_ñ</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Yeru</title>
		<link>http://www.pablasso.com/2008/05/18/el-proyecto-euler-problema-1#comment-43559</link>
		<dc:creator>Yeru</dc:creator>
		<pubDate>Mon, 19 May 2008 16:37:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.pablasso.com/?p=447#comment-43559</guid>
		<description>@_@  No sabia de este proyecto Euler... La verdad que no, se ve bien interesante.. seguire viendo los problemas que publiques, notese que dije viendo y no resolviendo jajaja... Saludos. 
*a Yeru le da flojera programar asuntos matematicos por mas simple que sean...

A ver a ver.. Cual es el otro problema que resolveras? Este estaba un poco facil... :)</description>
		<content:encoded><![CDATA[<p>@_@  No sabia de este proyecto Euler&#8230; La verdad que no, se ve bien interesante.. seguire viendo los problemas que publiques, notese que dije viendo y no resolviendo jajaja&#8230; Saludos.<br />
*a Yeru le da flojera programar asuntos matematicos por mas simple que sean&#8230;</p>
<p>A ver a ver.. Cual es el otro problema que resolveras? Este estaba un poco facil&#8230; :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Michoacano</title>
		<link>http://www.pablasso.com/2008/05/18/el-proyecto-euler-problema-1#comment-43558</link>
		<dc:creator>Michoacano</dc:creator>
		<pubDate>Mon, 19 May 2008 14:40:51 +0000</pubDate>
		<guid isPermaLink="false">http://www.pablasso.com/?p=447#comment-43558</guid>
		<description>A eso me refería  cuando dije que en una formula, pero creo que si esto fuera un concurso no  aceptarían esa forma.</description>
		<content:encoded><![CDATA[<p>A eso me refería  cuando dije que en una formula, pero creo que si esto fuera un concurso no  aceptarían esa forma.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: xiam</title>
		<link>http://www.pablasso.com/2008/05/18/el-proyecto-euler-problema-1#comment-43556</link>
		<dc:creator>xiam</dc:creator>
		<pubDate>Mon, 19 May 2008 03:37:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.pablasso.com/?p=447#comment-43556</guid>
		<description>Bien, el #include debería ser a stdio.h pero wordpress me lo borró.</description>
		<content:encoded><![CDATA[<p>Bien, el #include debería ser a stdio.h pero wordpress me lo borró.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: xiam</title>
		<link>http://www.pablasso.com/2008/05/18/el-proyecto-euler-problema-1#comment-43555</link>
		<dc:creator>xiam</dc:creator>
		<pubDate>Mon, 19 May 2008 03:35:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.pablasso.com/?p=447#comment-43555</guid>
		<description>Creo que el problema está mal planteado por que es ambiguo, por ejemplo, con el caso del 15 ya sabemos que es divisible entre 3 o 5, pero tengamos en cuenta que el 'o lógico' no es exclusivo, es decir, la suma de múltiplos de 3 o 5 menores de 20 podría ser:

+ 3 + 6 + 9 + 12 + 15 + 18 (los de 3)
+ 5 + 10 + 15 (los de 5)

Donde el 15 estaría siendo sumado dos veces, la suma de dos 15 no alteraría las restricciones del problema ya que el 'ó' sigue siendo verdadero y la proposición se sigue cumpliendo.

Suponiendo que ésta solución es válida también se puede resolver de ésta forma:

&lt;pre lang="c" line="1"&gt;
#include &lt;stdio.h&gt;

#define SUM(n) (n*(n+1)/2)
#define TOP 1000

int main() {
  printf("%d\n", 3*SUM((TOP-1)/3) + 5*SUM((TOP-1)/5));
  return 0;
}
&lt;/pre&gt;

Pero suponiendo la otra parte, es decir, que el 'ó' es en realidad un 'ó' exclusivo, se requeriría restar al resultado anterior los números que son múltiplos de 3 y 5, pero todos los números que son múltiplos de 3 y 5 son múltiplos de 3*5 = 15, entonces:

&lt;pre lang="c" line="1"&gt;
#include &lt;stdio.h&gt;

#define SUM(n) (n*(n+1)/2)
#define TOP 1000

int main() {
  printf("%d\n", 3*SUM((TOP-1)/3) + 5*SUM((TOP-1)/5) - 15*SUM((TOP-1)/15));
  return 0;
}
&lt;/pre&gt;

Y ese montón de cosas raras las baso en la siguiente demostración nerdosa:

A y B números naturales.

Se requiere la suma de todos los múltiplos de A menores a B.

El mayor número natural menor que B es C = B - 1, entonces, los múltiplos de A pueden ser menores o iguales a C sin alterar el resultado, es decir

A &#60;= C &#60; B

Según el problema, la suma que buscamos se puede escribir como:

A*1 + A*2 + A*3 + ... + A*D

Donde D es el número de los múltiplos de A menor o iguales a C, es decir, la parte entera de C / A, D = [[C/A]], donde [[]] es la función mayor entero (básicamente un floor())

A*1 + A*2 + A*3 + ... + A*D = A(1 + 2 + 3 + ... + D)

Pero sabemos que (1 + 2 + ... + n) = n(n+1)/2, entonces

A*1 + A*2 + A*3 + ... + A*D = A(1 + 2 + 3 + ... + D) = A(D(D+1)/2).

La suma que estamos buscando es equivalente a

A(D(D+1)/2)

En el problema simplemente cambiamos las variables por las constantes apropiadas, y como en C, el número 5.8 necesariamente se trunca a 5 para seguir siendo int, no nos hace falta implementar una función [[]].</description>
		<content:encoded><![CDATA[<p>Creo que el problema está mal planteado por que es ambiguo, por ejemplo, con el caso del 15 ya sabemos que es divisible entre 3 o 5, pero tengamos en cuenta que el &#8216;o lógico&#8217; no es exclusivo, es decir, la suma de múltiplos de 3 o 5 menores de 20 podría ser:</p>
<p>+ 3 + 6 + 9 + 12 + 15 + 18 (los de 3)<br />
+ 5 + 10 + 15 (los de 5)</p>
<p>Donde el 15 estaría siendo sumado dos veces, la suma de dos 15 no alteraría las restricciones del problema ya que el &#8216;ó&#8217; sigue siendo verdadero y la proposición se sigue cumpliendo.</p>
<p>Suponiendo que ésta solución es válida también se puede resolver de ésta forma:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="c"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #339933;">#define SUM(n) (n*(n+1)/2)</span>
<span style="color: #339933;">#define TOP 1000</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: #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>, <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">*</span>SUM<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>TOP<span style="color: #cc66cc;">-1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">*</span>SUM<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>TOP<span style="color: #cc66cc;">-1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span><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>Pero suponiendo la otra parte, es decir, que el &#8216;ó&#8217; es en realidad un &#8216;ó&#8217; exclusivo, se requeriría restar al resultado anterior los números que son múltiplos de 3 y 5, pero todos los números que son múltiplos de 3 y 5 son múltiplos de 3*5 = 15, entonces:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="c"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #339933;">#define SUM(n) (n*(n+1)/2)</span>
<span style="color: #339933;">#define TOP 1000</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: #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>, <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">*</span>SUM<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>TOP<span style="color: #cc66cc;">-1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">*</span>SUM<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>TOP<span style="color: #cc66cc;">-1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">-</span> <span style="color: #cc66cc;">15</span><span style="color: #66cc66;">*</span>SUM<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>TOP<span style="color: #cc66cc;">-1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span><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>Y ese montón de cosas raras las baso en la siguiente demostración nerdosa:</p>
<p>A y B números naturales.</p>
<p>Se requiere la suma de todos los múltiplos de A menores a B.</p>
<p>El mayor número natural menor que B es C = B - 1, entonces, los múltiplos de A pueden ser menores o iguales a C sin alterar el resultado, es decir</p>
<p>A &lt;= C &lt; B</p>
<p>Según el problema, la suma que buscamos se puede escribir como:</p>
<p>A*1 + A*2 + A*3 + &#8230; + A*D</p>
<p>Donde D es el número de los múltiplos de A menor o iguales a C, es decir, la parte entera de C / A, D = [[C/A]], donde [[]] es la función mayor entero (básicamente un floor())</p>
<p>A*1 + A*2 + A*3 + &#8230; + A*D = A(1 + 2 + 3 + &#8230; + D)</p>
<p>Pero sabemos que (1 + 2 + &#8230; + n) = n(n+1)/2, entonces</p>
<p>A*1 + A*2 + A*3 + &#8230; + A*D = A(1 + 2 + 3 + &#8230; + D) = A(D(D+1)/2).</p>
<p>La suma que estamos buscando es equivalente a</p>
<p>A(D(D+1)/2)</p>
<p>En el problema simplemente cambiamos las variables por las constantes apropiadas, y como en C, el número 5.8 necesariamente se trunca a 5 para seguir siendo int, no nos hace falta implementar una función [[]].</p>
]]></content:encoded>
	</item>
</channel>
</rss>
