Kategorien
Erlang

Erlang Übungsbeispiele

Aufgabe: 2520 ist die kleinste Zahl, die durch jede Zahl von 1-10 ohne Rest geteilt werden kann. Was ist die kleinste positive Zahl, die durch alle Zahlen von 1-20 ohne Rest teilbar ist? Es soll die Brute Force Variante programmiert werden.

Lösung:

-module(kleinsterAllesTeiler).
-compile(export_all).

kleinsterAllesTeiler(X) -> kleinsterAllesTeiler(X, 2, X).
kleinsterAllesTeiler(X, Teiler, KleinsteSuperZahl) when (Teiler > X) -> KleinsteSuperZahl;
kleinsterAllesTeiler(X, Teiler, KleinsteSuperZahl)->
    %io:fwrite("X: ~w \t Teiler: ~w \t KleinsteSuperZahl: ~w\n", [X, Teiler, KleinsteSuperZahl]),
    case teilbar(KleinsteSuperZahl, Teiler) of
        true ->kleinsterAllesTeiler(X, Teiler + 1, KleinsteSuperZahl);
        false ->kleinsterAllesTeiler(X, 2, KleinsteSuperZahl + 1)
end.

teilbar(X, Teiler) when (X rem Teiler) == 0 -> true;
teilbar(X, Teiler) -> false.

Ergebnis: 232.792.560 (ca. 10s Programmlaufzeit, sehr respektabel). Mit der auskommentierten Bildschirmausgabe terminiert das Programm innerhalb von Tagen by the way:)