From 1cc5e61ff04c4db06f2775fdabde5231b0e0f521 Mon Sep 17 00:00:00 2001 From: Rahul Bhandari <90493221+imrahulkb@users.noreply.github.com> Date: Mon, 30 Oct 2023 11:09:26 +0530 Subject: [PATCH] Update Problem001.js (#1536) * Update Problem001.js * Update Problem001.js * Update Problem001.js * Update Problem001.js * Update Problem001.js --- Project-Euler/Problem001.js | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/Project-Euler/Problem001.js b/Project-Euler/Problem001.js index c47c10bd1c..a88f912603 100644 --- a/Project-Euler/Problem001.js +++ b/Project-Euler/Problem001.js @@ -1,20 +1,23 @@ // https://projecteuler.net/problem=1 -/* Multiples of 3 and 5 - 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. +/* Multiples of 3 and 5 +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. */ +// This method uses the nSum function to add the nSum for 3 and 5. However, it needs to subtract the nSum for 15 once to avoid double counting. const multiplesThreeAndFive = (num) => { if (num < 1) throw new Error('No natural numbers exist below 1') + num -= 1 + let sum = 0 - let total = 0 - // total for calculating the sum - for (let i = 1; i < num; i++) { - if (i % 3 === 0 || i % 5 === 0) { - total += i - } - } - return total + // The nSum function calculates the sum of the first n numbers in the sequence with a common difference of num. + // Here, n is denoted as frequency. + const nSum = (num, frequency) => (frequency * (frequency + 1) * num) >> 1 + + sum += nSum(3, Math.floor(num / 3)) + sum += nSum(5, Math.floor(num / 5)) + sum -= nSum(15, Math.floor(num / 15)) + return sum } export { multiplesThreeAndFive }