JavaScript Program to Find All Divisors of a Number

In this article, we will demonstrate different approaches to writing a JavaScript Program to Find all Divisors of a Number. We will have an input number and print all the divisors of that number in the form of a resultant array.

Methods to Find All Divisors of a Number

Table of Content

  • Method 1: Naive Approach
  • Method 2: Recursive Approach
  • Method 3: Optimised Approach


Method 1: Naive Approach

In this method, we will use a JavaScript loop to iterate the possible factors and Math.pow() method to get the square root of the number. Instead of Math.pow() method, we can also use Math.sqrt() or i*i < n condition.

Example:

Javascript
function prime(n) {
    let result = [1,n];
    for (let i = 2; i < Math.pow(n, 0.5); i++) {
        if (n % i == 0) {
            result.push(i);
            result.push(n / i);
        }
    }
    return result.sort((a, b) => a - b);
}

const num = 90;
console.log("Prime factors of " + 
    num + ": " + prime(num));

Output
Prime factors of 90: 1,2,3,5,6,9,10,15,18,30,45,90

Method 2: Recursive Approach

In this method, we will call the function recursively and return the output with the spread operator to get the array output.

Example:

Javascript
function recursiveFactor(n, d) {
    if (n < 1) return [];    
    if (n == 1) return [1];
    if (n == 2) return [1,2];
    if(n/d<2)
    return [n];
    if (n % d == 0) return [d, ...recursiveFactor(n, d + 1)];
    return recursiveFactor(n, d + 1);
}

const num = 85;
console.log(
    "All factors of " +
        num + ": " +
        recursiveFactor(num, 1)
);

Output
All factors of 85: 1,5,17,85

Method 3: Optimised Approach

In this method, we will iterate only up to the square root of the number and add both the divisor and its complement (the number divided by the divisor) to the result array. This approach is more efficient than the naive approach, especially for large numbers.

Example:

JavaScript
function optimizedDivisors(n) {
    let result = [];
    for (let i = 1; i <= Math.sqrt(n); i++) {
        if (n % i == 0) {
            result.push(i);
            if (i !== n / i) {
                result.push(n / i);
            }
        }
    }
    return result.sort((a, b) => a - b);
}

const num = 90;
console.log("All divisors of " + num + ": " + optimizedDivisors(num));

Output
All divisors of 90: 1,2,3,5,6,9,10,15,18,30,45,90