|
1 | 1 | // https://projecteuler.net/problem=1
|
2 | | -/* Multiples of 3 and 5 |
3 | | -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. |
| 2 | +/* Multiples of 3 and 5 |
| 3 | +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. |
4 | 4 | Find the sum of all the multiples of 3 or 5 below the provided parameter value number.
|
5 | 5 | */
|
6 | 6 |
|
| 7 | +// 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. |
7 | 8 | const multiplesThreeAndFive = (num) => {
|
8 | 9 | if (num < 1) throw new Error('No natural numbers exist below 1')
|
| 10 | + num -= 1 |
| 11 | + let sum = 0 |
9 | 12 |
|
10 | | - lettotal=0 |
11 | | - // total for calculating the sum |
12 | | - for(leti=1;i<num;i++){ |
13 | | -if(i%3===0||i%5===0){ |
14 | | - total+=i |
15 | | - } |
16 | | - } |
17 | | - return total |
| 13 | + // The nSum function calculates the sum of the first n numbers in the sequence with a common difference of num. |
| 14 | + // Here, n is denoted as frequency. |
| 15 | + constnSum=(num,frequency)=>(frequency*(frequency+1)*num)>>1 |
| 16 | + |
| 17 | + sum+=nSum(3,Math.floor(num/3)) |
| 18 | + sum+=nSum(5,Math.floor(num/5)) |
| 19 | + sum-=nSum(15,Math.floor(num/15)) |
| 20 | + return sum |
18 | 21 | }
|
19 | 22 |
|
20 | 23 | export { multiplesThreeAndFive }
|
0 commit comments