diff --git a/AdventOfCode.lpi b/AdventOfCode.lpi index ac855eb..eb33314 100644 --- a/AdventOfCode.lpi +++ b/AdventOfCode.lpi @@ -65,6 +65,10 @@ + + + + diff --git a/AdventOfCode.lpr b/AdventOfCode.lpr index 4d5448f..5139121 100644 --- a/AdventOfCode.lpr +++ b/AdventOfCode.lpr @@ -26,7 +26,7 @@ uses Classes, SysUtils, CustApp, USolver, UTrebuchet, UCubeConundrum, UGearRatios, UScratchcards, UGiveSeedFertilizer, UWaitForIt, UCamelCards, - UHauntedWasteland; + UHauntedWasteland, UNumberTheory; type diff --git a/UNumberTheory.pas b/UNumberTheory.pas new file mode 100644 index 0000000..f46ce3e --- /dev/null +++ b/UNumberTheory.pas @@ -0,0 +1,60 @@ +{ + Solutions to the Advent Of Code. + Copyright (C) 2023 Stefan Müller + + This program is free software: you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free Software + Foundation, either version 3 of the License, or (at your option) any later + version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see . +} + +unit UNumberTheory; + +{$mode ObjFPC}{$H+} + +interface + +uses + Classes, SysUtils; + +type + + { TNumberTheory } + + TNumberTheory = class + public + class function GreatestCommonDivisor(AValue1, AValue2: Integer): Integer; + class function LeastCommonMultiple(AValue1, AValue2: Integer): Integer; + end; + +implementation + +{ TNumberTheory } + +class function TNumberTheory.GreatestCommonDivisor(AValue1, AValue2: Integer): Integer; +var + t: Integer; +begin + while AValue2 <> 0 do + begin + t := AValue2; + AValue2 := AValue1 mod AValue2; + AValue1 := t; + end; + Result := AValue1; +end; + +class function TNumberTheory.LeastCommonMultiple(AValue1, AValue2: Integer): Integer; +begin + Result := (Abs(AValue1) div GreatestCommonDivisor(AValue1, AValue2)) * Abs(AValue2); +end; + +end. +