<?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[Verständnisproblem mit return]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich stehe gerade aufm Schlauch. Ich habe hier einen Code, der prüft, ob eine Zahl eine Primzahl ist. Ich prüfe einfach, ob die Zahl nur zwei Teile hat, doch verstehe ich nicht ganz die Arbeitsweise dieser Funktion:</p>
<pre><code class="language-cpp">bool Prime(unsigned int k)
{
	if (n &lt;= 2 ) return false;
	unsigned int i=2, limit =k/2;

	for (; i&lt;=limit; ++i)
		if(k%i==0)
			return false;

	return true;
}
</code></pre>
<p>Wenn k durch i teilbar ist, dann wird false zurückgegen. Aber woher weiß ich dann, ob es eine Primzahl ist? Ich muss also prüfen, ob zweimal false zurückgeben wird? Außerdem wird in jedem Fall ja true zurückgegeben, da das Programm ja dahin kommt (oder hört es beim ersten true auf...sowas wie break)?</p>
<p>Irgendwie kapier ich das gerade nicht und bitte daher um eure Hilfe<br />
Vielen Dank<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/249896/verständnisproblem-mit-return</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 06:03:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/249896.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 13 Sep 2009 18:24:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verständnisproblem mit return on Sun, 13 Sep 2009 18:24:22 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich stehe gerade aufm Schlauch. Ich habe hier einen Code, der prüft, ob eine Zahl eine Primzahl ist. Ich prüfe einfach, ob die Zahl nur zwei Teile hat, doch verstehe ich nicht ganz die Arbeitsweise dieser Funktion:</p>
<pre><code class="language-cpp">bool Prime(unsigned int k)
{
	if (n &lt;= 2 ) return false;
	unsigned int i=2, limit =k/2;

	for (; i&lt;=limit; ++i)
		if(k%i==0)
			return false;

	return true;
}
</code></pre>
<p>Wenn k durch i teilbar ist, dann wird false zurückgegen. Aber woher weiß ich dann, ob es eine Primzahl ist? Ich muss also prüfen, ob zweimal false zurückgeben wird? Außerdem wird in jedem Fall ja true zurückgegeben, da das Programm ja dahin kommt (oder hört es beim ersten true auf...sowas wie break)?</p>
<p>Irgendwie kapier ich das gerade nicht und bitte daher um eure Hilfe<br />
Vielen Dank<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777780</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Sun, 13 Sep 2009 18:24:22 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem mit return on Sun, 13 Sep 2009 18:30:36 GMT]]></title><description><![CDATA[<p>return verlässt sofort die Funktion. Sprich es wird kein Code mehr aufgerufen. (mal abgesehen von Destruktoren).</p>
<p>Die Funktion übernimmt einfach eine Zahl und gibt true zurück, wenn sie eine Primzahl ist. Warum willst du da zwei Zahlen überprüfen?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777782</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 13 Sep 2009 18:30:36 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem mit return on Sun, 13 Sep 2009 18:32:53 GMT]]></title><description><![CDATA[<p>2 ist keine Primzahl?</p>
<pre><code class="language-cpp">bool Prime(unsigned int k)
{
  if (k &lt; 2)
    return false;
  if (k%2 == 0)
    return k==2 ? true : false;

  unsigned int limit = unsigned int(sqrt(float(k)));

  for (unsigned int i=3; i &lt;= limit; i += 2)
    if(k%i == 0)
      return false;

  return true;
}
</code></pre>
<p>bei limit bin ich mir nicht ganz sicher, aber sollte hinkommen...</p>
<p>bb</p>
<p>PS: Falls die Fkt sehr zeitkritisch sein sollte, dann nimmst du besser nen Array mit Primzahlen und prüfst, ob eine der Primzahlen diese Zahl teilt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777785</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 13 Sep 2009 18:32:53 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem mit return on Sun, 13 Sep 2009 18:34:04 GMT]]></title><description><![CDATA[<p>Also, ein return springt aus der Funktion, da wird nix mehr danach ausgeführt!<br />
Sobald eine Zahl nur durch sich und 1 Teilbar ist, also keine andere, dann ist es eine.<br />
Wenn also in der Schleife die Teilung funktioniert (k/i gibt keinen Rest, das macht Modulo) ist es keine Primzahl.</p>
<p>Aber einen Fehler hat die Funktion:<br />
Die Teilung durch 2 als Limit!<br />
13/2 = 6<br />
13 ist eine Primzal, 6 aber nicht, trotzdem returnd die Funktion true <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /><br />
Liegt an der Rundung.<br />
Lass die Teilung einfach weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777788</guid><dc:creator><![CDATA[kleiner teiler]]></dc:creator><pubDate>Sun, 13 Sep 2009 18:34:04 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem mit return on Sun, 13 Sep 2009 18:35:02 GMT]]></title><description><![CDATA[<p>wenn k durch i teilbar ist und 1 &lt; i &lt; k gilt, kann k keine Primzahl sein. Deswegen wird kan auch false zurückgegeben. Der Anfang ist aber falsch. 2 ist natürlich prim. Deine Funktion liefert aber false zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777789</guid><dc:creator><![CDATA[primzahlzaehler]]></dc:creator><pubDate>Sun, 13 Sep 2009 18:35:02 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem mit return on Sun, 13 Sep 2009 18:39:12 GMT]]></title><description><![CDATA[<blockquote>
<p>2 ist keine Primzahl?</p>
</blockquote>
<p>*g* doch, per Definition.<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777792</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 13 Sep 2009 18:39:12 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem mit return on Sun, 13 Sep 2009 18:42:05 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<blockquote>
<p>2 ist keine Primzahl?</p>
</blockquote>
<p>*g* doch, per Definition.<br />
Simon</p>
</blockquote>
<p>ach echt? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f623.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--persevering_face"
      title="&gt;.&lt;"
      alt="😣"
    /><br />
deshalb hab ich ja auch ne fkt hingeschrieben, die richtig funktioniert...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777793</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 13 Sep 2009 18:42:05 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem mit return on Sun, 13 Sep 2009 18:42:18 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<blockquote>
<p>2 ist keine Primzahl?</p>
</blockquote>
<p>*g* doch, per Definition.<br />
Simon</p>
</blockquote>
<p>Beweis:<br />
<a href="http://www.getdigital.de/products/Two_is_the_oddest_prime/lng/1/her/rss" rel="nofollow">http://www.getdigital.de/products/Two_is_the_oddest_prime/lng/1/her/rss</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777794</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 13 Sep 2009 18:42:18 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem mit return on Sun, 13 Sep 2009 18:59:59 GMT]]></title><description><![CDATA[<p>Ohne Fließkommazahl und ohne Wurzel könnte man es noch so machen</p>
<pre><code class="language-cpp">bool prim(unsigned x)
{
	if (x&lt;=4)       return x &amp; 2; //&lt; fuer 0,1,2,3,4
	if ((x &amp; 1)==0) return false; //&lt; gerade Zahlen
	unsigned t = 1;     //&lt; Zu testender Teiler
	unsigned q = 1;     //&lt; Quadrat des Teilers
	// Invariante: t*t == q
	for (;;) {
		unsigned oldq = q;
		t += 2;          //&lt; Teiler in 2er-Schritten testen
		q += (t-1) &lt;&lt; 2; //&lt; Invariante herstellen
		// Alle Teiler von x muessen kleiner oder gleich
		// der Wurzel von x sein. Wenn wir ein t mit x&lt;t^2
		// erreicht haben, kann abgebrochen werden.
		// Ausserdem fangen wir noch einen Ueberlauf ab...
		if (x&lt;q || q&lt;oldq) return true;
		if ((x % t)==0) return false; // Teiler gefunden -&gt; x nicht prim
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1777804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777804</guid><dc:creator><![CDATA[primzahlzaehler]]></dc:creator><pubDate>Sun, 13 Sep 2009 18:59:59 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem mit return on Sun, 13 Sep 2009 19:42:38 GMT]]></title><description><![CDATA[<p>Neulich hat eine Messung ergeben, daß s+=i*i;++i; genauso viele takte braucht wie s+=q;q+=2*i+1;++i;<br />
ich nehme an, daß dein code langsamer ist, weil die register pressure größer ist als for(t=3;t*t&lt;x;++t).<br />
außerdem, welcher überlauf? ist der nur theoretisch oder kann der wirklich passieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777823</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 13 Sep 2009 19:42:38 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem mit return on Sun, 13 Sep 2009 19:48:08 GMT]]></title><description><![CDATA[<p>primzahlzaehler schrieb:</p>
<blockquote>
<p>Ohne Fließkommazahl und ohne Wurzel könnte man es noch so machen</p>
</blockquote>
<p>Wenn's darum geht, das Verfahren zu verbessern, kann man auch gleich Miller-Rabin oder AKS-Test verwenden. Dann hätte der Threadersteller aber vermutlich noch mehr Fragen, wie das funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777827</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 13 Sep 2009 19:48:08 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem mit return on Sun, 13 Sep 2009 20:11:40 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>außerdem, welcher überlauf? ist der nur theoretisch oder kann der wirklich passieren?</p>
</blockquote>
<p>So, wie es aussieht, soll &quot;q&lt;oldq&quot; wohl den Fall abfangen, dass q überläuft und dann kleiner ist als der alte Wert. Ich schätze, ohne diese Bedingung könnte es bei großen Eingaben (Primzahl in der Nähe von <code>unsigned(-1)</code> ) zu einer Endlosschleife führen.</p>
<p>Ich weiß nicht, wie es mit der Geschwindigkeit aussieht. Aber was die Genauigkeit bei Fließkommazahlen angeht, muss man ja etwas aufpassen. Wichtig ist, dass <code>limit</code> eine möglichst kleine Zahl ist, die <code>x &lt;= limit*limit</code> erfüllt. Kommt dann natürlich drauf an, wieviele signifikante Stellen ein float bzw double hat und wieviele Bits ein unsigned hat, etc. Der paranoide Programmierer könnte dann so etwas schreiben:</p>
<pre><code class="language-cpp">unsigned limit = std::sqrt(float(limit));
while (limit*limit&lt;x) ++limit;
</code></pre>
<p>Aber auch hier gibt es eine Überlaufgefahr bei limit*limit und Zahlen x, die sehr nah an unsigned(-1) dran sind.</p>
<p>edit: Miller-Rabin versteht doch keiner <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>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777839</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sun, 13 Sep 2009 20:11:40 GMT</pubDate></item></channel></rss>