020 – Fakultät und Quersumme

 

Die Fakultät einer Zahl ist definiert als

n! := n \cdot \left(n - 1\right) \cdot \ldots \cdot 2 \cdot 1.

Was ist die Quersume der Fakultät von 100?

Lösung

Da Matlab nicht symbolisch rechnet, erhalten wir für die Fakultät von 100 nur eine Näherung. Die Eingabe

factorial(100)

ergibt als Ergebnis: 9.3326e+157

Dies hilft uns nicht bei der Berechnung der Quersumme, aber immerhin wissen wir so schon, wie viele Stellen das Ergebnis hat (nämlich 158).

Wir erstellen daher einen Vektor mit Integerwerten von 0 bis 9 und der Länge 160, speichern in der letzten Stelle die 1 und lassen dann die Zahlen von 2 bis 100 mit einer eigenen Multiplikationsfunktion verarbeiten. Dabei wird der jeweilige Faktor mit jeder Stelle des Vektors multipliziert. Anschließend wird jeweils der Übertrag in die höheren Felder übernommen, so dass die Einträge des Vektors einstellig bleiben.

Matlab-Code:

function euler020

    clear;
    tic

    vecLength = 160;
    n = 100;

    f = zeros(1, vecLength);
    f(vecLength) = 1;

    for i = 2 : n
        f = multiply(f, i);
    end

    sum(f)
    toc
end

function m = multiply(f, g)

    vecLength = length(f);
    m = zeros(1, vecLength);
    for i = vecLength : -1 : 1
        if f(i) > 0
            m(i) = m(i) + f(i) * g;
            j = i;
            while m(j) > 9
                m(j - 1) = m(j - 1) + floor(m(j) / 10);
                m(j) = mod(m(j), 10);
                j = j - 1;
            end
        end
    end
end

Ergebnis: 648
Rechenzeit: 0.003774 Sekunden

Ähnliche Artikel

Kommentar verfassen