<?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[programm zum Sieb des Eratosthenes...bitte um verbesserung&#x2F;hilfe mit nem kleinen problem]]></title><description><![CDATA[<p>huhu,</p>
<p>ich hab aus langeweile mal n programm zur primzahlberechnung mit dem Sieb des Eratosthenes geschrieben. könnte jemand das kleine programm mal in richtung performance + verbesserungen überprüfen? wäre dem sehr dankbar!</p>
<p>hier der code:</p>
<pre><code class="language-cpp">// Primzahlberechnung mit dem Sieb des Eratosthenes
// Filename: prime.cpp

#include &lt;iostream&gt;
#include &lt;math.h&gt;

using namespace std;

// prototypes
void initPrimes  (const unsigned int PrimeMax, bool* p_bPrimes);
void checkPrimes (const unsigned int PrimeMax, bool* p_bPrimes);
void printPrimes (const unsigned int PrimeMax, const bool* p_bPrimes);

// main
int main()
{
    // variables
    bool* p_bPrimes = NULL;     // Pointer auf das spätere bool-Array für die Primzahlen
    unsigned int PrimeMax;      // größte Zahl, die auf Primalität geprüft werden soll

    // User nach PrimeMax fragen
    cout &lt;&lt; &quot;Groesste Zahl eingeben, die auf Primalitaet geprueft werden soll: &quot;;
    cin &gt;&gt; PrimeMax;

    // Speicher auf dem Heap reservieren
    p_bPrimes = new bool[PrimeMax];

    // initialisieren, heraus&quot;sieben&quot; und ausgeben
    initPrimes(PrimeMax, p_bPrimes);

    checkPrimes(PrimeMax, p_bPrimes);

    printPrimes(PrimeMax, p_bPrimes);

    // reservierten Speicher freigeben
    delete[] p_bPrimes;
    p_bPrimes = NULL;

    return 0;

} // main

// functions

// initPrimes
// alle Zahlen zwischen 2 und PrimeMax als Primzahlen initialisieren
void initPrimes (const unsigned int PrimeMax, bool* p_bPrimes)
{
    for (int i = 2; i &lt;= PrimeMax; ++i)
    {
        p_bPrimes[i] = true;
    }

} // initPrimes

// checkPrimes
// Non-Primzahlen heraus&quot;sieben&quot;
void checkPrimes (const unsigned int PrimeMax, bool* p_bPrimes)
{
    for (int i = 2; i &lt;= sqrt(PrimeMax); ++i)
    {
        if (p_bPrimes[i])
        {
            for (int j = i * i; j &lt;= PrimeMax; ++j)
            {
                if (j % i == 0)
                {
                    p_bPrimes[j] = false;
                }
            }
        }
    }

} // checkPrimes

// printPrimes
// Primzahlen in der Konsole ausgeben
void printPrimes (const unsigned int PrimeMax, const bool* p_bPrimes)
{
    for (int i = 2; i &lt;= PrimeMax; ++i)
    {
        if (p_bPrimes[i])
        {
            cout &lt;&lt; i &lt;&lt; endl;
        }
    }

} // printPrimes
</code></pre>
<p>was ich außerdem noch wissen wollte: wie übergebe ich der funktion &quot;printPrimes&quot; das array als referenz?<br />
wenn ich es so mache:</p>
<pre><code class="language-cpp">// printPrimes
// Primzahlen in der Konsole ausgeben
void printPrimes (const unsigned int PrimeMax, const bool&amp; r_bPrimes)
{
    for (int i = 2; i &lt;= PrimeMax; ++i)
    {
        if (r_bPrimes[i])
        {
            cout &lt;&lt; i &lt;&lt; endl;
        }
    }

} // printPrimes
</code></pre>
<p>bekomme ich folgenden compilerfehler:</p>
<blockquote>
<p>invalid types `const bool[int]' for array subscript</p>
</blockquote>
<p>gruß,</p>
<p>chris</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/123551/programm-zum-sieb-des-eratosthenes-bitte-um-verbesserung-hilfe-mit-nem-kleinen-problem</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 15:46:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/123551.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 17 Oct 2005 22:28:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to programm zum Sieb des Eratosthenes...bitte um verbesserung&#x2F;hilfe mit nem kleinen problem on Mon, 17 Oct 2005 22:28:00 GMT]]></title><description><![CDATA[<p>huhu,</p>
<p>ich hab aus langeweile mal n programm zur primzahlberechnung mit dem Sieb des Eratosthenes geschrieben. könnte jemand das kleine programm mal in richtung performance + verbesserungen überprüfen? wäre dem sehr dankbar!</p>
<p>hier der code:</p>
<pre><code class="language-cpp">// Primzahlberechnung mit dem Sieb des Eratosthenes
// Filename: prime.cpp

#include &lt;iostream&gt;
#include &lt;math.h&gt;

using namespace std;

// prototypes
void initPrimes  (const unsigned int PrimeMax, bool* p_bPrimes);
void checkPrimes (const unsigned int PrimeMax, bool* p_bPrimes);
void printPrimes (const unsigned int PrimeMax, const bool* p_bPrimes);

// main
int main()
{
    // variables
    bool* p_bPrimes = NULL;     // Pointer auf das spätere bool-Array für die Primzahlen
    unsigned int PrimeMax;      // größte Zahl, die auf Primalität geprüft werden soll

    // User nach PrimeMax fragen
    cout &lt;&lt; &quot;Groesste Zahl eingeben, die auf Primalitaet geprueft werden soll: &quot;;
    cin &gt;&gt; PrimeMax;

    // Speicher auf dem Heap reservieren
    p_bPrimes = new bool[PrimeMax];

    // initialisieren, heraus&quot;sieben&quot; und ausgeben
    initPrimes(PrimeMax, p_bPrimes);

    checkPrimes(PrimeMax, p_bPrimes);

    printPrimes(PrimeMax, p_bPrimes);

    // reservierten Speicher freigeben
    delete[] p_bPrimes;
    p_bPrimes = NULL;

    return 0;

} // main

// functions

// initPrimes
// alle Zahlen zwischen 2 und PrimeMax als Primzahlen initialisieren
void initPrimes (const unsigned int PrimeMax, bool* p_bPrimes)
{
    for (int i = 2; i &lt;= PrimeMax; ++i)
    {
        p_bPrimes[i] = true;
    }

} // initPrimes

// checkPrimes
// Non-Primzahlen heraus&quot;sieben&quot;
void checkPrimes (const unsigned int PrimeMax, bool* p_bPrimes)
{
    for (int i = 2; i &lt;= sqrt(PrimeMax); ++i)
    {
        if (p_bPrimes[i])
        {
            for (int j = i * i; j &lt;= PrimeMax; ++j)
            {
                if (j % i == 0)
                {
                    p_bPrimes[j] = false;
                }
            }
        }
    }

} // checkPrimes

// printPrimes
// Primzahlen in der Konsole ausgeben
void printPrimes (const unsigned int PrimeMax, const bool* p_bPrimes)
{
    for (int i = 2; i &lt;= PrimeMax; ++i)
    {
        if (p_bPrimes[i])
        {
            cout &lt;&lt; i &lt;&lt; endl;
        }
    }

} // printPrimes
</code></pre>
<p>was ich außerdem noch wissen wollte: wie übergebe ich der funktion &quot;printPrimes&quot; das array als referenz?<br />
wenn ich es so mache:</p>
<pre><code class="language-cpp">// printPrimes
// Primzahlen in der Konsole ausgeben
void printPrimes (const unsigned int PrimeMax, const bool&amp; r_bPrimes)
{
    for (int i = 2; i &lt;= PrimeMax; ++i)
    {
        if (r_bPrimes[i])
        {
            cout &lt;&lt; i &lt;&lt; endl;
        }
    }

} // printPrimes
</code></pre>
<p>bekomme ich folgenden compilerfehler:</p>
<blockquote>
<p>invalid types `const bool[int]' for array subscript</p>
</blockquote>
<p>gruß,</p>
<p>chris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/894630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/894630</guid><dc:creator><![CDATA[chris&#x27; 1]]></dc:creator><pubDate>Mon, 17 Oct 2005 22:28:00 GMT</pubDate></item><item><title><![CDATA[Reply to programm zum Sieb des Eratosthenes...bitte um verbesserung&#x2F;hilfe mit nem kleinen problem on Mon, 17 Oct 2005 22:43:22 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// Primzahlberechnung mit dem Sieb des Eratosthenes
// Filename: prime.cpp //komischer kommentar. 

#include &lt;iostream&gt;
#include &lt;math.h&gt;

using namespace std;

// prototypes 
//schreib keine prototypen mehr. schreib einbfach die funktionen vor die main. 
void initPrimes  (const unsigned int PrimeMax, bool* p_bPrimes);
//der int muß nicht const sein, ist doch by value übergeben. 
void checkPrimes (const unsigned int PrimeMax, bool* p_bPrimes);
void printPrimes (const unsigned int PrimeMax, const bool* p_bPrimes);

// main
int main()
{
    // variables
//ganz schlecht. mach die variablen so spät wie möglich!
    bool* p_bPrimes = NULL;     // Pointer auf das spätere bool-Array für die Primzahlen
    unsigned int PrimeMax;      // größte Zahl, die auf Primalität geprüft werden soll

    // User nach PrimeMax fragen
    cout &lt;&lt; &quot;Groesste Zahl eingeben, die auf Primalitaet geprueft werden soll: &quot;;
    cin &gt;&gt; PrimeMax;

    // Speicher auf dem Heap reservieren
    p_bPrimes = new bool[PrimeMax];
//also hier: bool* p_bPrimes = new bool[PrimeMax];
    // initialisieren, heraus&quot;sieben&quot; und ausgeben
    initPrimes(PrimeMax, p_bPrimes);

    checkPrimes(PrimeMax, p_bPrimes);

    printPrimes(PrimeMax, p_bPrimes);

    // reservierten Speicher freigeben
    delete[] p_bPrimes;
    p_bPrimes = NULL;//unnötig. 

    return 0;

} // main

// functions

// initPrimes
// alle Zahlen zwischen 2 und PrimeMax als Primzahlen initialisieren
void initPrimes (const unsigned int PrimeMax, bool* p_bPrimes)
{
    for (int i = 2; i &lt;= PrimeMax; ++i)
//äh. &lt;= PrimeMax? 
//passt nicht zu new bool[PrimeMax];
//greifst auf ein element zu viel zu
    {
        p_bPrimes[i] = true;
    }

} // initPrimes

// checkPrimes
// Non-Primzahlen heraus&quot;sieben&quot;
void checkPrimes (const unsigned int PrimeMax, bool* p_bPrimes)
{
    for (int i = 2; i &lt;= sqrt(PrimeMax); ++i)
//vielleicht besser 
//    int endi=sqrt(PrimeMax);
//    for (int i = 2; i &lt;= endi; ++i)
    {
        if (p_bPrimes[i])
        {
            for (int j = i * i; j &lt;= PrimeMax; ++j)
//            for (int j = i * i; j &lt;= PrimeMax; j+=2)
//allerdings die geraden zahlen extra behandeln. 
            {
                if (j % i == 0)
                {
                    p_bPrimes[j] = false;
//                    if(p_bPrimes[j]) p_bPrimes[j] = false;
//ist lustigerweise schneller, weil du seltener schreibst, 
//schreiben ist teuer als lesen
                }
            }
        }
    }

} // checkPrimes

// printPrimes
// Primzahlen in der Konsole ausgeben
void printPrimes (const unsigned int PrimeMax, const bool* p_bPrimes)
{
//cout&lt;&lt;2&lt;&lt;'\n';
//    for (int i = 3; i &lt;= PrimeMax; i+=2)
    for (int i = 3; i &lt;= PrimeMax; i++)
    {
        if (p_bPrimes[i])
        {
            cout &lt;&lt; i &lt;&lt; endl;
        }
    }

} // printPrimes
</code></pre>
<blockquote>
<p>was ich außerdem noch wissen wollte: wie übergebe ich der funktion &quot;printPrimes&quot; das array als referenz?</p>
</blockquote>
<p>arrays übergeben sich von alleine per referenz. sozusagen.<br />
aber du hast ja gar kein echtes array, sondern einen zeiger auf freispeicher. dann mußte auch diesen zeiger übergeben, wie du es gemacht hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/894633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/894633</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 17 Oct 2005 22:43:22 GMT</pubDate></item><item><title><![CDATA[Reply to programm zum Sieb des Eratosthenes...bitte um verbesserung&#x2F;hilfe mit nem kleinen problem on Mon, 17 Oct 2005 23:01:08 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<pre><code class="language-cpp">// checkPrimes
// Non-Primzahlen heraus&quot;sieben&quot;
void checkPrimes (const unsigned int PrimeMax, bool* p_bPrimes)
{
    for (int i = 2; i &lt;= sqrt(PrimeMax); ++i)
//vielleicht besser 
//    int endi=sqrt(PrimeMax);
//    for (int i = 2; i &lt;= endi; ++i)
    {
        if (p_bPrimes[i])
        {
            for (int j = i * i; j &lt;= PrimeMax; ++j)
//            for (int j = i * i; j &lt;= PrimeMax; j+=2)
//allerdings die geraden zahlen extra behandeln. 
            {
                if (j % i == 0)
                {
                    p_bPrimes[j] = false;
//                    if(p_bPrimes[j]) p_bPrimes[j] = false;
//ist lustigerweise schneller, weil du seltener schreibst, 
//schreiben ist teuer als lesen
                }
            }
        }
    }
    
} // checkPrimes
</code></pre>
</blockquote>
<p>das ist ein scherz oder ? die sache mit dem schreiben kann richtig sein, es käme auf den exakten code an, den der compiler darausmacht, aber es ist keine prinzipielle verbesserung. auf jedenfall müsste aber klar sein, dass</p>
<pre><code class="language-cpp">if (j % i == 0)
</code></pre>
<p>völliger unfug ist...</p>
<pre><code class="language-cpp">void checkPrimes (const unsigned int PrimeMax, bool* p_bPrimes)
{
    for (int j = 2; j &lt;= PrimeMax; j+=2 )
        p_bPrimes[j] = false;
    for (int endi=sqrt(PrimeMax), i = 3; i &lt;= endi; i+=2)
    {
        if (p_bPrimes[i])
        {
            for (int j = i * i; j &lt;= PrimeMax; j += 2*i)
            {
                p_bPrimes[j] = false;
            }
        }
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/894637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/894637</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 17 Oct 2005 23:01:08 GMT</pubDate></item><item><title><![CDATA[Reply to programm zum Sieb des Eratosthenes...bitte um verbesserung&#x2F;hilfe mit nem kleinen problem on Mon, 17 Oct 2005 23:17:29 GMT]]></title><description><![CDATA[<p>das mit dem % hab ich gar nicht zur kenntnis genommen, weil das zu ausgefallen war.<br />
natürlich j += 2*i und kein %, genau wie du sagst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/894639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/894639</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 17 Oct 2005 23:17:29 GMT</pubDate></item><item><title><![CDATA[Reply to programm zum Sieb des Eratosthenes...bitte um verbesserung&#x2F;hilfe mit nem kleinen problem on Tue, 18 Oct 2005 15:50:17 GMT]]></title><description><![CDATA[<p>hi!<br />
danke für eure verbesserungen.<br />
weshalb nimmt man besser kein modulo?langsamer oder? weil funktioniert hats.<br />
ich hab mal umgebaut, wie ihr es empfohlen und ich es sinnvoll gehalten hab(t):</p>
<pre><code class="language-cpp">// Programm zur Primzahlberechnung mit dem Sieb des Eratosthenes

#include &lt;iostream&gt;
#include &lt;math.h&gt;

using namespace std;

// functions

// initPrimes
// alle Zahlen zwischen 2 und PrimeMax als Primzahlen initialisieren
void initPrimes (const unsigned int PrimeMax, bool* p_bPrimes)
{
    for (int i = 2; i &lt;= PrimeMax; ++i)
    {
        p_bPrimes[i] = true;
    }

} // initPrimes

// checkPrimes
// Non-Primzahlen heraus&quot;sieben&quot;
void checkPrimes (const unsigned int PrimeMax, bool* p_bPrimes)
{
    // alle geraden Zahlen außer '2' sind keine Primzahlen
    for (int j = 2; j &lt;= PrimeMax; j += 2)
    {
        p_bPrimes[j] = false;
    }

    // alle Vielfachen ungerader Primzahlen sind keine Primzahlen
    for (int endi = static_cast&lt;int&gt; (sqrt(PrimeMax)), i = 3; i &lt;= endi; i += 2)
    {
        if (p_bPrimes[i])
        {
            for (int j = i * i; j &lt;= PrimeMax; j += 2 * i)
            {
                p_bPrimes[j] = false;
            }
        }
    }
} // checkPrimes

// printPrimes
// Primzahlen in der Konsole ausgeben
void printPrimes (const unsigned int PrimeMax, const bool* p_bPrimes)
{
    cout &lt;&lt; &quot;2\n&quot;;
    for (int i = 3; i &lt;= PrimeMax; i += 2)
    {
        if (p_bPrimes[i])
        {
            cout &lt;&lt; i &lt;&lt; endl;
        }
    }

} // printPrimes

// main
int main()
{    
    unsigned int PrimeMax;      // größte Zahl, die auf Primalität geprüft werden soll
    // User nach PrimeMax fragen
    cout &lt;&lt; &quot;Groesste Zahl eingeben, die auf Primalitaet geprueft werden soll: &quot;;
    cin &gt;&gt; PrimeMax;

    // Speicher für bool-Array auf dem Heap reservieren
    bool* p_bPrimes = new bool[PrimeMax + 1];

    // initialisieren, heraus&quot;sieben&quot; und ausgeben
    initPrimes(PrimeMax, p_bPrimes);

    checkPrimes(PrimeMax, p_bPrimes);

    printPrimes(PrimeMax, p_bPrimes);

    // reservierten Speicher freigeben
    delete[] p_bPrimes;

    return 0;

} // main
</code></pre>
<p>wenn ich nun</p>
<pre><code class="language-cpp">bool* p_bPrimes = new bool[PrimeMax + 1];
</code></pre>
<p>so mit + 1 erzeuge, dann kann ich die schleife mit &lt;= ruhig so stehen lassen oder? ansonsten tritt nämlich der fehler auf, das wenn der user bspw 103 eingibt, und die schleife nur mit &lt; gemacht wird, wird 103 nicht als primzahl ausgegeben da ja nicht drauf zugegriffen werden könnte...stimmt so oder?</p>
<p>gruß,</p>
<p>chris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/895275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/895275</guid><dc:creator><![CDATA[chris&#x27; 1]]></dc:creator><pubDate>Tue, 18 Oct 2005 15:50:17 GMT</pubDate></item><item><title><![CDATA[Reply to programm zum Sieb des Eratosthenes...bitte um verbesserung&#x2F;hilfe mit nem kleinen problem on Tue, 18 Oct 2005 16:28:32 GMT]]></title><description><![CDATA[<p>chris' schrieb:</p>
<blockquote>
<p>hi!<br />
danke für eure verbesserungen.<br />
weshalb nimmt man besser kein modulo?langsamer oder?</p>
</blockquote>
<p>ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/895307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/895307</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 18 Oct 2005 16:28:32 GMT</pubDate></item><item><title><![CDATA[Reply to programm zum Sieb des Eratosthenes...bitte um verbesserung&#x2F;hilfe mit nem kleinen problem on Wed, 19 Oct 2005 07:23:57 GMT]]></title><description><![CDATA[<p>chris' schrieb:</p>
<blockquote>
<p>weshalb nimmt man besser kein modulo?langsamer oder? weil funktioniert hats.<br />
ich hab mal umgebaut, wie ihr es empfohlen und ich es sinnvoll gehalten hab(t):</p>
</blockquote>
<p>Kurz: ja<br />
Lang: Jeder Schleifendurchlauf braucht Zeit. Und wenn du deinen Zähler bei jedem Schritt um 2*i erhöhst, verringerst du damit effektiv die Anzahl deiner Schleifendurchläufe.</p>
<blockquote>
<p>wenn ich nun</p>
<pre><code class="language-cpp">bool* p_bPrimes = new bool[PrimeMax + 1];
</code></pre>
<p>so mit + 1 erzeuge, dann kann ich die schleife mit &lt;= ruhig so stehen lassen oder? ansonsten tritt nämlich der fehler auf, das wenn der user bspw 103 eingibt, und die schleife nur mit &lt; gemacht wird, wird 103 nicht als primzahl ausgegeben da ja nicht drauf zugegriffen werden könnte...stimmt so oder?</p>
</blockquote>
<p>Ja, dann ist das &lt;= anwendbar (C/C++-Arrays werden ab 0 gezählt, deshalb hat das letzte Element den Index größe-1).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/895822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/895822</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 19 Oct 2005 07:23:57 GMT</pubDate></item><item><title><![CDATA[Reply to programm zum Sieb des Eratosthenes...bitte um verbesserung&#x2F;hilfe mit nem kleinen problem on Wed, 19 Oct 2005 09:22:35 GMT]]></title><description><![CDATA[<p>Da wir schon beim Optimieren sind: Ich würde das mit dem Sieb nicht ganz so ernst nehmen und den Speicherverbrauch hinsichtlich der Lücken im Array optimieren. Das kann man erreichen, indem man direkt die Primzahlen anstatt der Prädikate speichert und überprüft, ob eine Zahl ein Vielfaches davon ist:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;
#include &lt;cmath&gt;

using namespace std;

unsigned long *createPrimes(unsigned int n)
{
    if(n==0)
        return 0;

    int i=1;
    unsigned long test = 3, limit;
    unsigned long *primes = new unsigned long[n];
    bool isPrime;

    primes[0]=2;

    while(i!=n)
    {
        isPrime = true;       
        limit = static_cast&lt;unsigned long&gt;(sqrt(static_cast&lt;long double&gt;(test)));

        //prüfen, ob es ein Vielfaches einer ungeraden Primzahl ist
        for(int j=1; j&lt;i; ++j)
            if(test%primes[j] == 0)
            {
                isPrime=false;
                break;
            }
            else if(primes[j]&gt;limit)
                break;

        if(isPrime)
            primes[i++]=test;

        test += 2;//nur ungerade Zahlen prüfen
    }

    return primes;
}

void pushPrimesUntil(unsigned int max, vector&lt;unsigned long&gt; &amp;result)
{
    if(max&lt;2)
        return;

    unsigned long test = 3, limit;
    bool isPrime;

    result.push_back(2);

    while(test&lt;=max)
    {
        isPrime = true;       
        limit = static_cast&lt;unsigned long&gt;(sqrt(static_cast&lt;long double&gt;(test)));

        //prüfen, ob es ein Vielfaches einer ungeraden Primzahl ist
        for(int j=1; j&lt;result.size(); ++j)
            if(test%result[j] == 0)
            {
                isPrime=false;
                break;
            }
            else if(result[j]&gt;limit)
                break;

        if(isPrime)
            result.push_back(test);

        test += 2;//nur ungerade Zahlen prüfen
    }   
}

template&lt;typename T&gt;
void printLines(T *array, int count)
{
    copy(array, array+count, ostream_iterator&lt;T&gt;(cout, &quot;\n&quot;));
}

template&lt;typename TContainer&gt;
void printLines(const TContainer &amp;container)
{
    copy(container.begin(), container.end(), ostream_iterator&lt;typename TContainer::value_type&gt;(cout, &quot;\n&quot;));
}

int main()
{   
    const int N=100;
    unsigned long *primes = createPrimes(N);
    cout &lt;&lt; &quot;Die ersten &quot; &lt;&lt; N &lt;&lt; &quot; Primzahlen:&quot; &lt;&lt; endl;
    printLines(primes, N);
    delete[] primes;   

    cout &lt;&lt; endl;

    vector&lt;unsigned long&gt; test;
    cout &lt;&lt; &quot;Die Primzahlen bis &quot; &lt;&lt; N &lt;&lt; &quot;:&quot; &lt;&lt; endl;
    pushPrimesUntil(N,test);
    printLines(test);   

    cin.get();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/895907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/895907</guid><dc:creator><![CDATA[schorsch code]]></dc:creator><pubDate>Wed, 19 Oct 2005 09:22:35 GMT</pubDate></item><item><title><![CDATA[Reply to programm zum Sieb des Eratosthenes...bitte um verbesserung&#x2F;hilfe mit nem kleinen problem on Wed, 19 Oct 2005 09:39:30 GMT]]></title><description><![CDATA[<p>@schorch: Das ist zwar ein nettes Programm zur Erzeugung von Primzahlen, aber nicht mehr das Sieb des Eratosthenes. (und irgendwas sagt mir, daß das eher langsamer ist als die ursprüngliche Variante)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/895927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/895927</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 19 Oct 2005 09:39:30 GMT</pubDate></item><item><title><![CDATA[Reply to programm zum Sieb des Eratosthenes...bitte um verbesserung&#x2F;hilfe mit nem kleinen problem on Wed, 19 Oct 2005 10:55:34 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>: Du hast wohl Recht. Dachte beim Sieb des Eratosthenes geht es trotz des Namens eher um die Tatsache, dass eine Primzahl kein Vielfaches einer anderen Primzahl sein darf, als das tatsächliche Wegstreichen der Vielfachen. Was die Geschwindigkeit angeht, müsste zumindest das Ausgeben schneller sein <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>
]]></description><link>https://www.c-plusplus.net/forum/post/895940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/895940</guid><dc:creator><![CDATA[schorsch code]]></dc:creator><pubDate>Wed, 19 Oct 2005 10:55:34 GMT</pubDate></item></channel></rss>