From f99f948fd16af0ef615fcce0c99f95ebf74240b7 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Wed, 8 May 2024 15:18:56 -0400 Subject: [PATCH] =?UTF-8?q?[Hacker=20Rank]:=20Project=20Euler=20#1:=20Mult?= =?UTF-8?q?iples=20of=203=20and=205=20solved=20=E2=9C=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hackerrank/projecteuler/Euler001.Test.cs | 29 +++++++++++++++ .../src/hackerrank/projecteuler/Euler001.cs | 36 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 algorithm-exercises-csharp/src/hackerrank/projecteuler/Euler001.Test.cs create mode 100644 algorithm-exercises-csharp/src/hackerrank/projecteuler/Euler001.cs diff --git a/algorithm-exercises-csharp/src/hackerrank/projecteuler/Euler001.Test.cs b/algorithm-exercises-csharp/src/hackerrank/projecteuler/Euler001.Test.cs new file mode 100644 index 0000000..ab99670 --- /dev/null +++ b/algorithm-exercises-csharp/src/hackerrank/projecteuler/Euler001.Test.cs @@ -0,0 +1,29 @@ +namespace algorithm_exercises_csharp.hackerrank.prohecteuler; + +[TestClass] +public class Euler001Test +{ + public class Euler001TestCase { + public int a; public int b; public int n; public int answer; + } + + // dotnet_style_readonly_field = true + private static readonly Euler001TestCase[] tests = [ + new() { a = 3, b = 5, n = 10, answer = 23}, + new() { a = 3, b = 5, n = 100, answer = 2318}, + new() { a = 3, b = 5, n = 1000, answer = 233168}, + + ]; + + [TestMethod] + public void Euler001ProblemTest() + { + int result; + + foreach (Euler001TestCase test in tests) { + result = Euler001Problem.Euler001(test.a, test.b, test.n); + Assert.AreEqual(test.answer, result); + } + } +} + diff --git a/algorithm-exercises-csharp/src/hackerrank/projecteuler/Euler001.cs b/algorithm-exercises-csharp/src/hackerrank/projecteuler/Euler001.cs new file mode 100644 index 0000000..553a822 --- /dev/null +++ b/algorithm-exercises-csharp/src/hackerrank/projecteuler/Euler001.cs @@ -0,0 +1,36 @@ +namespace algorithm_exercises_csharp.hackerrank.prohecteuler; + +using System.Diagnostics.CodeAnalysis; + +public class Euler001Problem +{ + [ExcludeFromCodeCoverage] + protected Euler001Problem() {} + + public static int SuOfArithmeticProgression(int n, int d) { + int new_n = n / d; + + return new_n * (1 + new_n) * d / 2; + } + + public static int GCD(int u, int v) + { + if (v != 0) + { + return GCD(v, u % v); + } + return u; + } + + // Function to find the sum of all multiples of a and b below n + public static int Euler001(int a, int b, int n) + { + // Since, we need the sum of multiples less than N + int new_n = n - 1; + int lcm = a * b / GCD(a, b); + + return SuOfArithmeticProgression(new_n, a) + + SuOfArithmeticProgression(new_n, b) - + SuOfArithmeticProgression(new_n, lcm); + } +}