Die Fakultät einer Zahl ist definiert als
.
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


