Angular, AWS und Symfony Freelancer

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:)

 


Posted

in

by

Tags:

Comments

2 Kommentare zu „Erlang Übungsbeispiele“

  1. Avatar von Umut
    Umut

    Wie ist dir Rechnung um mathematisch auf die Zahl 232.792.560 zu kommen?

    1. Avatar von Sebastian Viereck
      Sebastian Viereck

      Interessant frage: ich würde programmieren zur kontrolle:
      For(i=20, i>1, i++)
      Wenn(zahl/i ist ganze zahl)
      Echo i
      Zahl = zahle/i

      Mathematisch geht es so: nimm alle zahlen von 2 bis 20, enferne zahlenpaare zahlen aus der menge, die multipliziert eine größere zahl aus der menge ergeben, z.b. 2*10=20. Die menge muss mutilpiziert werden und ergibt die gesuchte zahl.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert