Summe aller Teiler bis Obergrenze

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
Necip
Beiträge: 122
Registriert: Do Nov 17, 2011 12:03 pm
Kontaktdaten:

Summe aller Teiler bis Obergrenze

Beitrag von Necip » Sa Okt 29, 2016 11:44 am

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;
    }

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Summe aller Teile bis Obergrenze

Beitrag von nufan » Sa Okt 29, 2016 1:07 pm

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.

Benutzeravatar
Necip
Beiträge: 122
Registriert: Do Nov 17, 2011 12:03 pm
Kontaktdaten:

Re: Summe aller Teiler bis Obergrenze

Beitrag von Necip » Sa Okt 29, 2016 1:29 pm

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?

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Summe aller Teiler bis Obergrenze

Beitrag von nufan » Sa Okt 29, 2016 1:32 pm

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.

Benutzeravatar
Necip
Beiträge: 122
Registriert: Do Nov 17, 2011 12:03 pm
Kontaktdaten:

Re: Summe aller Teiler bis Obergrenze

Beitrag von Necip » Sa Okt 29, 2016 1:57 pm

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.

Antworten