Project Euler is a website that provides a series of challenging mathematical and computational problems designed to encourage and develop problem-solving skills in mathematics and computer programming. The problems on the website range in difficulty from relatively easy to extremely difficult, and cover a wide range of topics including number theory, combinatorics, and cryptography. The site provides a platform for programmers and mathematicians to share their solutions and discuss problem-solving techniques, and is a popular resource for those interested in improving their mathematical and computational skills. From time to time I choose one problem and solve it.
The first problem on Project Euler is a classic programming challenge that many developers encounter early on in their coding journey. The problem statement is as follows:
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6, and 9. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 1000.
The problem seems simple enough – we need to find all the multiples of 3 or 5 below 1000, and then sum them up. But how do we approach this in code? Here’s one possible solution in C#:
public static int SumMultiplesOf3And5(int limit)
{
int sum = 0;
for (int i = 0; i < limit; i++)
{
if (i % 3 == 0 || i % 5 == 0)
{
sum += i;
}
}
return sum;
}
In this solution, we use a loop to iterate over all the numbers from 0 to the specified limit
. We then check if each number is a multiple of 3 or 5 using the modulo operator %
. If the number is a multiple of either 3 or 5, we add it to a running sum.
To test our solution, let’s write some unit tests using NUnit:
[TestFixture]
public class Problem1Tests
{
[Test]
public void TestSumMultiplesOf3And5WithLimit10()
{
int result = Problem1.SumMultiplesOf3And5(10);
Assert.AreEqual(23, result);
}
[Test]
public void TestSumMultiplesOf3And5WithLimit1000()
{
int result = Problem1.SumMultiplesOf3And5(1000);
Assert.AreEqual(233168, result);
}
}
In these tests, we check the output of the SumMultiplesOf3And5
function for two different input values: 10 and 1000. The expected output for the first test is 23, which is the sum of the multiples of 3 and 5 below 10. The expected output for the second test is 233168, which is the sum of the multiples of 3 and 5 below 1000.
When we run these tests, they should both pass if our implementation is correct.
Overall, this problem is a great exercise in using loops and conditional statements to solve a simple mathematical problem. With a little bit of programming, we can easily find the sum of all the multiples of 3 or 5 below any given limit.