Published on

Multiples of 3 and 5

Authors

This post is part of the Project Euler series.

Problem

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 the provided parameter value number.

Solution

function isMultiple(dividend, divisor) {
  return dividend % divisor === 0
}

function multiplesOf3and5(number) {
  let sum = 0

  for (let n = 3; n < number; n++) {
    if (isMultiple(n, 3) || isMultiple(n, 5)) {
      sum += n
    }
  }

  return sum
}

multiplesOf3and5(10) // Expected output: 23
multiplesOf3and5(21) // Expected output: 98
multiplesOf3and5(148) // Expected output: 5175
multiplesOf3and5(474) // Expected output: 52094
multiplesOf3and5(1072) // Expected output: 268394
multiplesOf3and5(1998) // Expected output: 929670

Explanation

We can find out if a number is divisible by another number using the remainder (%) operator. This operator returns the remainder left over when one operand is divided by a second operand. For the operation n % d, n is called the dividend and d is called the divisor.

NOTE: The remainder always takes the sign of the dividend.

console.log(7 % 5) // Expected output: 2
console.log(-7 % 5) // Expected output: -2

If there is no remainder after the division operation, the return will be 0. It means that the dividend is a multiple of the divisor. For example:

4 (dividend) is a multiple of 2 (divisor) because the remainder of division is 0.

console.log(4 % 2) // Expected output: 0
console.log(-4 % 2) // Expected output: -0

13 (dividend) is not a multiple of 6 (divisor) because the remainder of the division is 5.

console.log(13 % 8) // Expected output: 5
console.log(-13 % 8) // Expected output: -5

Thus, we can create a function to check if a number is a multiple of another using the remainder operator and comparing with 0.

function isMultiple(dividend, divisor) {
  return dividend % divisor === 0
}

After that, we can start a loop from the number 3 (because that's the first number divisible by 3 or 5) to the given number.

Inside the loop, we check if the current number is divisible by 3 or 5, if so, we add it to the sum variable and at the end we return the result of the sum.

function multiplesOf3and5(number) {
  let sum = 0

  for (let n = 3; n < number; n++) {
    if (isMultiple(n, 3) || isMultiple(n, 5)) {
      sum += n
    }
  }

  return sum
}

And that's it! We have solved this problem 🎉

References


Thanks for reading this far and see you in the upcoming posts! 👋
Happy coding! 🚀