Follow

Follow

# Smallest Common Multiple - JavaScript Solution and Walkthrough

## (14/21) Learn how to solve coding challenges using FreeCodeCamp's curriculum.

Benjamin Semah
·Apr 30, 2022· • 14/21 Smallest Common Multiple
• Understanding the Challenge
• Pseudocode
• Solving the Challenge
• Final Solution
• Congratulations! ## 14/21 Smallest Common Multiple

Find the smallest common multiple of the provided parameters that can be evenly divided by both, as well as by all sequential numbers in the range between these parameters.

The range will be an array of two numbers that will not necessarily be in numerical order.

For example, if given 1 and 3, find the smallest common multiple of both 1 and 3 that is also evenly divisible by all numbers between 1 and 3. The answer here would be 6.

``````function smallestCommons(arr) {

return arr;
}

smallestCommons([1,5]);
``````

Credit: FreeCodeCamp.org

## Understanding the Challenge

First, let's get a better understanding of the challenge before we attempt a solution.

In this challenge, the function you're to complete takes an array as a parameter. This array contains two numbers.

The `smallestCommons()` function is to return the smallest common mutiple of both numbers and is also divisible by all numbers between the two given numbers.

In other words, the number to be returned should be the smallest possible number that is divisible by all numbers from the least of the two given numbers to the greater.

Let's take an example to make things clearer.

Assume the given array contains 1 and 4. Then, `smallesCommons([1, 4])` should return `12`

This is because `12` is the least possible number divisible by all numbers from 1 to 4 (that is 1, 2, 3, and 4).

Note that in the challenge description you're informed the two numbers in the array "will not necessarily be in numerical order."

## Pseudocode

``````Given an array of two number
Sort the array in ascending order
Get all numbers between the two given numbers (inclusive)
Multiply all numbers to get at least one common multiple
Loop through all multiples of the biggest given number
For every iteration of the loop
Check if all numbers in the given range can divide the multiple
If yes, return the multiple
``````

## Solving the Challenge

First, we need to sort the given array. That way, we can get to know which of the two given numbers is the less (let's call it `smallNum`) and which is greater (let's call it `bigNum`).

``````  const sortedArray = arr.sort((a, b) => a - b)
const smallNum = sortedArray
const bigNum = sortedArray
``````

We also need to know how many numbers are in present in the range of numbers from `smallNum` to `bigNum`. Let's save it in a variable called `range`.

``````  const range = bigNum - smallNum + 1;
``````

Next, we need to find at least one number that can be divided by all the numbers in the range. We can easily find a common multiplier by multiplying all the numbers in the range.

``````  let commonMultiple = 1;

for (let i = smallNum; i <= bigNum; i++) {
commonMultiple *= i;
}
``````

We cannot return this as the final answer because it is possible for there to be another multiple that is lesser. So we need to find out if there is.

To do so, we loop through all the multiples of `bigNum` from `bigNum` to `commonMultiple`. For every iteration of the loop, we check if `i` (which will be a multiple of `bigNum`) is also a multiple of all the other numbers in the range.

``````  for (let i = bigNum; i <= commonMultiple; i += bigNum) {
let count = 0;
for (let j = smallNum; j <= bigNum; j++) {
if (i % j === 0) {
count += 1;
}
}
if (divisors === range) {
return i;
}
}
``````

We do that by running a count of how many of the numbers in `range` can perfectly divide `i`. If we can get an `i` whose count equals `range`, we return that `i`.

## Final Solution

``````function smallestCommons(arr) {
const sortedArray = arr.sort((a, b) => a - b);

const smallNum = sortedArray
const bigNum = sortedArray

const range = bigNum - smallNum + 1;

let commonMultiple = 1;

for (let i = smallNum; i <= bigNum; i++) {
commonMultiple *= i;
}

for (let i = bigNum; i <= commonMultiple; i += bigNum) {
let count = 0;
for (let j = smallNum; j <= bigNum; j++) {
if (i % j === 0) {
count += 1;
}
}
if (count === range) {
return i;
}
}
}

smallestCommons([1, 5]); // 60
``````

## Congratulations!

You just cracked the 14th challenge in this series. Cheers and happy coding!