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); + } +}