<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Project Euler Problem 10]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche mich gerade am Project Euler und versage dort bereits an der 10. Aufgabe.<br />
Der Code von mir funktioniert fehlerlos, jedoch nur bis ca. i = 300000. Mein Code müsste also ihrgendwie optimiert und verändert werden. Ich weiß jedoch nicht, an welchen Stellen im Code ich noch etwas herausholen könnte. (Laut Project Euler sollen die Berechnungen nicht mehr als 1 Minute dauern!)</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;inttypes.h&gt;

using namespace std;

int main ()
{
	uint64_t sum = 5; // 64bit Zahl
	bool prime = true;

	for (int i = 5; i&lt;=2000000; i+=2)
	{
		prime = true;

		for (int j = 3; j &lt; i; j+=2)  // Überprüft, ob Primzahl
		{
			if (i % j == 0)
			{
				prime = false;
				break;
			}

		}

		if (prime == true) // Wenn Primzahl summe+primzahl
			sum += i;

	}

	cout &lt;&lt; sum;
}
</code></pre>
<p>Grüße,<br />
Kartoffel</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/280813/project-euler-problem-10</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 23:20:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280813.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 22 Jan 2011 00:02:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Project Euler Problem 10 on Sat, 22 Jan 2011 00:02:36 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche mich gerade am Project Euler und versage dort bereits an der 10. Aufgabe.<br />
Der Code von mir funktioniert fehlerlos, jedoch nur bis ca. i = 300000. Mein Code müsste also ihrgendwie optimiert und verändert werden. Ich weiß jedoch nicht, an welchen Stellen im Code ich noch etwas herausholen könnte. (Laut Project Euler sollen die Berechnungen nicht mehr als 1 Minute dauern!)</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;inttypes.h&gt;

using namespace std;

int main ()
{
	uint64_t sum = 5; // 64bit Zahl
	bool prime = true;

	for (int i = 5; i&lt;=2000000; i+=2)
	{
		prime = true;

		for (int j = 3; j &lt; i; j+=2)  // Überprüft, ob Primzahl
		{
			if (i % j == 0)
			{
				prime = false;
				break;
			}

		}

		if (prime == true) // Wenn Primzahl summe+primzahl
			sum += i;

	}

	cout &lt;&lt; sum;
}
</code></pre>
<p>Grüße,<br />
Kartoffel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010009</guid><dc:creator><![CDATA[Kartoffel]]></dc:creator><pubDate>Sat, 22 Jan 2011 00:02:36 GMT</pubDate></item><item><title><![CDATA[Reply to Project Euler Problem 10 on Sat, 22 Jan 2011 00:22:29 GMT]]></title><description><![CDATA[<p>Du kannst j &lt;= i / 3 versuchen. Spart immerhin 60% sinnloses prüfen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>So klappts bei mir unter einer Minute:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std; 

int main () 
{ 
    __int64 sum = 5; // 64bit Zahl 

    for (int i = 5; i&lt;=2000000; i+=2) 
        for (int j = 3; j &lt;= i / 3; j+=2)
            if (i % j == 0) 
            { 
                sum += i; 
                break; 
            }

    cout &lt;&lt; sum; 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2010013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010013</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Sat, 22 Jan 2011 00:22:29 GMT</pubDate></item><item><title><![CDATA[Reply to Project Euler Problem 10 on Sat, 22 Jan 2011 00:21:28 GMT]]></title><description><![CDATA[<p>Oder bis zur Wurzel.</p>
<p>Threads zur Primzahlbestimmung gibt's hier im Forum übrigens wie Sand am Meer. Einfach mal suchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010014</guid><dc:creator><![CDATA[SG1]]></dc:creator><pubDate>Sat, 22 Jan 2011 00:21:28 GMT</pubDate></item><item><title><![CDATA[Reply to Project Euler Problem 10 on Sat, 22 Jan 2011 07:51:34 GMT]]></title><description><![CDATA[<p>Ich werde auch nichts zur Primzahlberechnung sagen, nur folgendes</p>
<pre><code>prime    prime==true
--------------------
false       false
true        true
</code></pre>
<p>&quot;prime==true&quot; liefert denselben Wahrheitswert wie den, der in prime gespeichert ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010045</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 22 Jan 2011 07:51:34 GMT</pubDate></item><item><title><![CDATA[Reply to Project Euler Problem 10 on Sat, 22 Jan 2011 09:40:48 GMT]]></title><description><![CDATA[<p><a href="http://www.primzahlen.de/" rel="nofollow">http://www.primzahlen.de/</a> Links im Menue: Primzahlentest(s)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010060</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Sat, 22 Jan 2011 09:40:48 GMT</pubDate></item><item><title><![CDATA[Reply to Project Euler Problem 10 on Sat, 22 Jan 2011 10:07:09 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>&quot;prime==true&quot; liefert denselben Wahrheitswert wie den, der in prime gespeichert ist.</p>
</blockquote>
<p>Ich dachte das wäre nur etwas &quot;designtechnisches&quot; und es wäre egal, wie ich das schreibe.<br />
Mein Lehrer in der Schule meinte, dass wir das immer &quot;prime == true&quot; schreiben sollen anstatt &quot;prime&quot;.</p>
<p>Und nochmal ein großes Danke an euch, habe es nun mit der Wurzel gelöst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010065</guid><dc:creator><![CDATA[Kartoffel]]></dc:creator><pubDate>Sat, 22 Jan 2011 10:07:09 GMT</pubDate></item><item><title><![CDATA[Reply to Project Euler Problem 10 on Sat, 22 Jan 2011 10:16:28 GMT]]></title><description><![CDATA[<p>Kartoffel schrieb:</p>
<blockquote>
<p>Mein Lehrer in der Schule meinte, dass wir das immer &quot;prime == true&quot; schreiben sollen anstatt &quot;prime&quot;.</p>
</blockquote>
<p>Hat er zufällig auch gesagt warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010067</guid><dc:creator><![CDATA[leeremenge]]></dc:creator><pubDate>Sat, 22 Jan 2011 10:16:28 GMT</pubDate></item><item><title><![CDATA[Reply to Project Euler Problem 10 on Sat, 22 Jan 2011 10:22:38 GMT]]></title><description><![CDATA[<blockquote>
<p>Kartoffel schrieb:<br />
Mein Lehrer in der Schule meinte, dass wir das immer &quot;prime == true&quot; schreiben sollen anstatt &quot;prime&quot;.</p>
<p>Hat er zufällig auch gesagt warum?</p>
</blockquote>
<p>Tut doch jetzt nicht so. Ihr kennt doch selbst die Antwort (auch wenn ihr, aus angeberei oder was weiß ich, vorgibt sie nicht zu kennen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010071</guid><dc:creator><![CDATA[BossDerBosse]]></dc:creator><pubDate>Sat, 22 Jan 2011 10:22:38 GMT</pubDate></item><item><title><![CDATA[Reply to Project Euler Problem 10 on Sat, 22 Jan 2011 16:44:18 GMT]]></title><description><![CDATA[<p>Kartoffel schrieb:</p>
<blockquote>
<p>ich versuche mich gerade am Project Euler und versage dort bereits an der 10. Aufgabe.<br />
Der Code von mir funktioniert fehlerlos, jedoch nur bis ca. i = 300000. Mein Code müsste also ihrgendwie optimiert und verändert werden. Ich weiß jedoch nicht, an welchen Stellen im Code ich noch etwas herausholen könnte. (Laut Project Euler sollen die Berechnungen nicht mehr als 1 Minute dauern!)</p>
</blockquote>
<p>Das liegt wohl daran, dass Dein Algorithmus eine Komplexität von <a href="http://de.wikipedia.org/wiki/Landau-Symbole" rel="nofollow">O(n^2)</a> hat. Das heißt, wenn er für eine Obergrenze N 10s benötigt, so benötigt er für für 2*N nicht das doppelte sondern das vierfache der Zeit.</p>
<p>Beherzige den Rat von SG1 und begrenze die Suche auf die Wurzel. Ersetze in Deinem Code die Zeile 15 durch</p>
<pre><code class="language-cpp">int ende = sqrt( double(i) ); // erfordert #include &lt;cmath&gt;
        for (int j = 3; j &lt;= ende; j+=2)  // Überprüft, ob Primzahl
</code></pre>
<p>, dann ist die Komplexität O(N*log(N)) und die Laufzeit deutlich unter einer Minute.</p>
<p>Noch schneller wrst Du mit dem <a href="http://de.wikipedia.org/wiki/Sieb_des_Eratosthenes" rel="nofollow">Sieb des Eratosthenes</a></p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;

int main()
{
    using namespace std;
    const size_t N = 2000000;
    long long sum = 0;
    vector&lt; bool &gt; sieb(N, true);
    for( vector&lt; bool &gt;::iterator prim = sieb.begin()+2; (prim = find( prim, sieb.end(), true )) != sieb.end(); ++prim )
    {
        int Prim = prim - sieb.begin();
        sum += Prim;
        // --   Sieb des Eratosthenes
        for( size_t idx = 2*Prim; idx &lt; sieb.size(); idx += Prim )
            sieb[ idx ] = false; // idx ist Vielfaches von Prim, also keine Primzahl
    }
    cout &lt;&lt; &quot;Summe aller Primzahlen bis &quot; &lt;&lt; N &lt;&lt; &quot; ist &quot; &lt;&lt; sum &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>das braucht nur den Bruchteil einer Sekunde.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010228</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sat, 22 Jan 2011 16:44:18 GMT</pubDate></item><item><title><![CDATA[Reply to Project Euler Problem 10 on Sat, 22 Jan 2011 17:38:33 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Beherzige den Rat von SG1 und begrenze die Suche auf die Wurzel. Ersetze in Deinem Code die Zeile 15 durch</p>
<pre><code class="language-cpp">int ende = sqrt( double(i) ); // erfordert #include &lt;cmath&gt;
        for (int j = 3; j &lt;= ende; j+=2)  // Überprüft, ob Primzahl
</code></pre>
<p>, dann ist die Komplexität O(N*log(N)) und die Laufzeit deutlich unter einer Minute.</p>
</blockquote>
<p>Meinst Du nicht eher O(N^1.5) ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010270</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 22 Jan 2011 17:38:33 GMT</pubDate></item><item><title><![CDATA[Reply to Project Euler Problem 10 on Sat, 22 Jan 2011 21:31:54 GMT]]></title><description><![CDATA[<p>Es ist schon so, die Asymptote von ∑<sub>1&lt;k&lt;n</sub>√k gleich n<sup>1.5</sup>/1.5 entspricht. Ungefähr <em>n</em>/ln<em>n</em> Zahlen davon sind Primzahlen. Es kann also nicht gesagt werden, dass die Wahrscheinlichkeit, dass ein i gerade Teiler von k ist, konstant ist. Kennst du irgendeinen Beweis, der die Laufzeitkomplexität von dieser groben Methode als O(N<sup>1.5</sup>) klarstellt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010386</guid><dc:creator><![CDATA[ich will einen beweis!!!!]]></dc:creator><pubDate>Sat, 22 Jan 2011 21:31:54 GMT</pubDate></item></channel></rss>