Find all divisors of a natural number | Set 1

Given a natural number n, print all distinct divisors of it.

Examples :

 Input : n = 10       
 Output: 1 2 5 10

 Input:  n = 100
 Output: 1 2 4 5 10 20 25 50 100

 Input:  n = 125
 Output: 1 5 25 125

Note that this problem is different from finding all prime factors.

A Naive Solution would be to iterate all the numbers from 1 to n, checking if that number divides n and printing it. Below is program for the same:

C/C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of Naive method to print all
// divisors
#include <bits/stdc++.h>
  
// function to print the divisors
void printDivisors(int n)
{
    for (int i=1;i<=n;i++)
        if (n%i==0)
            printf("%d ",i);
}
  
/* Driver program to test above function */
int main()
{
    printf("The divisors of 100 are: \n");
    printDivisors(100);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of Naive method to print all
// divisors
  
class Test
{
    // method to print the divisors
    static void printDivisors(int n)
    {
        for (int i=1;i<=n;i++)
            if (n%i==0)
                System.out.printf("%d ",i);
    }
  
    // Driver method
    public static void main(String args[])
    {
        System.out.println("The divisors of 100 are: ");
        printDivisors(100);;
    }
}

chevron_right


Python

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python implementation of Naive method
# to print all divisors
  
# method to print the divisors
def printDivisors(n) :
    i = 1
    while i <= n :
        if (n % i==0) :
            print i,
        i = i + 1
          
# Driver method
print "The divisors of 100 are: "
printDivisors(100)
  
#This code is contributed by Nikita Tiwari.

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of Naive method 
// to print all divisors
using System;
  
class GFG {
      
    // method to print the divisors
    static void printDivisors(int n)
    {
        for (int i = 1; i <= n; i++)
            if (n % i == 0)
                Console.Write( i + " ");
    }
  
    // Driver method
    public static void Main()
    {
        Console.Write("The divisors of",
                          " 100 are: ");
        printDivisors(100);;
    }
}
  
// This code is contributed by nitin mittal.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP implementation of Naive 
// method to print all divisors
  
// function to print the divisors
function printDivisors($n)
{
    for ($i = 1; $i <= $n; $i++)
        if ($n % $i == 0)
            echo $i," ";
}
  
// Driver Code
echo "The divisors of 100 are:\n";
printDivisors(100);
  
// This code is contributed by ajit
?>

chevron_right


Output :

The divisors of 100 are: 
1 2 4 5 10 20 25 50 100

Time Complexity : O(n)
Auxiliary Space : O(1)

Can we improve the above solution?
If we look carefully, all the divisors are present in pairs. For example if n = 100, then the various pairs of divisors are: (1,100), (2,50), (4,25), (5,20), (10,10)

Using this fact we could speed up our program significantly.
We, however have to careful if there are two equal divisors as in case of (10, 10). In such case we’d print only one of them.

Below is a implementation for the same:

C/C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// A Better (than Naive) Solution to find all divisiors
#include <bits/stdc++.h>
  
// Function to print the divisors
void printDivisors(int n)
{
    // Note that this loop runs till square root
    for (int i=1; i<=sqrt(n); i++)
    {
        if (n%i == 0)
        {
            // If divisors are equal, print only one
            if (n/i == i)
                printf("%d ", i);
  
            else // Otherwise print both
                printf("%d %d ", i, n/i);
        }
    }
}
  
/* Driver program to test above function */
int main()
{
    printf("The divisors of 100 are: \n");
    printDivisors(100);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// A Better (than Naive) Solution to find all divisors
  
class Test
{
    // method to print the divisors
    static void printDivisors(int n)
    {
        // Note that this loop runs till square root
        for (int i=1; i<=Math.sqrt(n); i++)
        {
            if (n%i==0)
            {
                // If divisors are equal, print only one
                if (n/i == i)
                    System.out.printf("%d ", i);
       
                else // Otherwise print both
                    System.out.printf("%d %d ", i, n/i);
            }
        }
    }
  
    // Driver method
    public static void main(String args[])
    {
        System.out.println("The divisors of 100 are: ");
        printDivisors(100);;
    }
}

chevron_right


Python

filter_none

edit
close

play_arrow

link
brightness_4
code

# A Better (than Naive) Solution to find all divisiors
import math 
  
# method to print the divisors
def printDivisors(n) :
      
    # Note that this loop runs till square root
    i = 1
    while i <= math.sqrt(n):
          
        if (n % i == 0) :
              
            # If divisors are equal, print only one
            if (n / i == i) :
                print i,
            else :
                # Otherwise print both
                print i , n/i,
        i = i + 1
  
# Driver method
print "The divisors of 100 are: "
printDivisors(100)
  
#This code is contributed by Nikita Tiwari.

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// A Better (than Naive) Solution to
// find all divisors
using System;
  
class GFG {
      
    // method to print the divisors
    static void printDivisors(int n)
    {
          
        // Note that this loop runs 
        // till square root
        for (int i = 1; i <= Math.Sqrt(n);
                                      i++)
        {
            if (n % i == 0)
            {
                  
                // If divisors are equal,
                // print only one
                if (n / i == i)
                    Console.Write(i + " ");
                  
                // Otherwise print both
                else 
                    Console.Write(i + " " 
                            + n / i + " ");
            }
        }
    }
  
    // Driver method
    public static void Main()
    {
        Console.Write("The divisors of "
                          + "100 are: \n");
        printDivisors(100);
    }
}
  
// This code is contributed by Smitha

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// A Better (than Naive) Solution
// to find all divisiors
  
// Function to print the divisors
function printDivisors($n)
{
      
    // Note that this loop
    // runs till square root
    for ($i = 1; $i <= sqrt($n); $i++)
    {
        if ($n%$i == 0)
        {
              
            // If divisors are equal,
            // print only one
            if ($n / $i == $i)
                echo $i," ";
  
            // Otherwise print both
            else 
                echo $i," ", $n/$i," ";
        }
    }
}
  
    // Driver Code
    echo "The divisors of 100 are: \n";
    printDivisors(100);
      
// This code is contributed by anuj_67.
  
  
?>

chevron_right



Output :

The divisors of 100 are: 
1 100 2 50 4 25 5 20 10

Time Complexity : O(sqrt(n))
Auxiliary Space : O(1)

However there is still a minor problem in the solution, can you guess?
Yes! the output is not in a sorted fashion which we had got using brute-force technique. Please refer below for a O(sqrt(n)) time solution that prints divisors in sorted order.

Find all divisors of a natural number | Set 2

This article is contributed by Ashutosh Kumar. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above



My Personal Notes arrow_drop_up