Seite 1 von 1
Summe aller Teiler bis Obergrenze
Verfasst: Sa Okt 29, 2016 11:44 am
von Necip
EDIT nufan: Abgetrennt von https://www.proggen.org/forum/viewtopic.php?f=21&t=6615
Ehrlich gesagt finde ich die "naive und sehr ineffiziente Implementierung" wesentlich einfacher und sehe keinen wirklichen Grund das Pferd von hinten aufzusäumen. Was ist an dieser Lösung ineffizient?
Code: Alles auswählen
int sum(int div, int n)
{
int s = 0;
for(int i = 0; i <= n; i++)
{
if(i % div == 0)
s += i;
}
return s;
}
Re: Summe aller Teile bis Obergrenze
Verfasst: Sa Okt 29, 2016 1:07 pm
von nufan
Der Algorithmus läuft in O(n) und hat eine Verzweigung drin. Ich kann das gleiche über die Gaußsche Summenformel abbilden:
Code: Alles auswählen
int sum(int div, int n)
{
int bound = n / div;
return (bound * (bound + 1) / 2) * div;
}
O(1), ohne Verzweigung.
Re: Summe aller Teiler bis Obergrenze
Verfasst: Sa Okt 29, 2016 1:29 pm
von Necip
Hallo dani93, es geht mir nicht um die Funktion selbst, sondern um das Binding! Ich erkenne den Nutzen nicht, die selbe Funktion auf eine kompliziertere Art zusammenzustricken. Bei mir gehen alle Alarmglocken an, wenn eine Sache von der Einfachheit abweicht. Mir scheint, als ob Bjarne Stroustrup sich in dieser Richtung etwas verkünstelt hat, oder würdest Du wirklich alle deine Funktionen auf Binding umstellen?
Re: Summe aller Teiler bis Obergrenze
Verfasst: Sa Okt 29, 2016 1:32 pm
von nufan
Ah dann hab ich das falsch verstanden, sorry. In meinem einfachen Beispiel ist das natürlich ein Overkill und vollkommen unnötig. Es wird aber sicher Fälle geben, in denen diese Verwendung Sinn macht. Ich finde es ein nettes Feature, es sinnvoll zu verwenden liegt in der Verantwortung der Entwickler.
Re: Summe aller Teiler bis Obergrenze
Verfasst: Sa Okt 29, 2016 1:57 pm
von Necip
Entschuldigung angenommen, wäre aber nicht nötig gewesen! ^^ Du brauchst auch nicht den Thread wieder umbiegen. Ich arbeite ggw. noch mit dem uralten C++ Standard und habe bisher alle Probleme damit lösen können.