# Find all divisors of a natural number | Set 2

• Difficulty Level : Easy
• Last Updated : 17 Sep, 2021

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

Examples:

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

``` 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 ```

We strongly recommend referring to the below article as a prerequisite.
Find all divisors of a natural number | Set 1
In the above post, we had found a way to find all the divisors in O(sqrt(n)).
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.

How to print the output in sorted order?
If we observe the output which we had got, we can analyze that the divisors are printed in a zig-zag fashion (small, large pairs). Hence if we store half of them then we can print them in sorted order.

Below is an implementation for the same:

## C++

 `// A O(sqrt(n)) program that prints all divisors``// in sorted order``#include ``using` `namespace` `std;` `// function to print the divisors``void` `printDivisors(``int` `n)``{``    ``// Vector to store half of the divisors``    ``vector<``int``> v;``    ``for` `(``int` `i = 1; i <= ``sqrt``(n); i++) {``        ``if` `(n % i == 0) {` `            ``// check if divisors are equal``            ``if` `(n / i == i)``                ``printf``(``"%d "``, i);``            ``else` `{``                ``printf``(``"%d "``, i);` `                ``// push the second divisor in the vector``                ``v.push_back(n / i);``            ``}``        ``}``    ``}` `    ``// The vector will be printed in reverse``    ``for` `(``int` `i = v.size() - 1; i >= 0; i--)``        ``printf``(``"%d "``, v[i]);``}` `/* Driver program to test above function */``int` `main()``{``    ``printf``(``"The divisors of 100 are: n"``);``    ``printDivisors(100);``    ``return` `0;``}`

## Java

 `// A O(sqrt(n)) java program that prints all divisors``// in sorted order` `import` `java.util.Vector;` `class` `Test {``    ``// method to print the divisors``    ``static` `void` `printDivisors(``int` `n)``    ``{``        ``// Vector to store half of the divisors``        ``Vector v = ``new` `Vector<>();``        ``for` `(``int` `i = ``1``; i <= Math.sqrt(n); i++) {``            ``if` `(n % i == ``0``) {` `                ``// check if divisors are equal``                ``if` `(n / i == i)``                    ``System.out.printf(``"%d "``, i);``                ``else` `{``                    ``System.out.printf(``"%d "``, i);` `                    ``// push the second divisor in the vector``                    ``v.add(n / i);``                ``}``            ``}``        ``}` `        ``// The vector will be printed in reverse``        ``for` `(``int` `i = v.size() - ``1``; i >= ``0``; i--)``            ``System.out.printf(``"%d "``, v.get(i));``    ``}` `    ``// Driver method``    ``public` `static` `void` `main(String args[])``    ``{``        ``System.out.println(``"The divisors of 100 are: "``);``        ``printDivisors(``100``);``    ``}``}`

## Python3

 `# A O(sqrt(n)) java program that prints``# all divisors in sorted order``import` `math` `# Method to print the divisors``def` `printDivisors(n) :``    ``list` `=` `[]``    ` `    ``# List to store half of the divisors``    ``for` `i ``in` `range``(``1``, ``int``(math.sqrt(n) ``+` `1``)) :``        ` `        ``if` `(n ``%` `i ``=``=` `0``) :``            ` `            ``# Check if divisors are equal``            ``if` `(n ``/` `i ``=``=` `i) :``                ``print` `(i, end ``=``" "``)``            ``else` `:``                ``# Otherwise print both``                ``print` `(i, end ``=``" "``)``                ``list``.append(``int``(n ``/` `i))``                ` `    ``# The list will be printed in reverse   ``    ``for` `i ``in` `list``[::``-``1``] :``        ``print` `(i, end ``=``" "``)``        ` `# Driver method``print` `(``"The divisors of 100 are: "``)``printDivisors(``100``)` `# This code is contributed by Gitanjali`

## C#

 `// A O(sqrt(n)) C# program that``// prints all divisors in sorted order``using` `System;` `class` `GFG {` `    ``// method to print the divisors``    ``static` `void` `printDivisors(``int` `n)``    ``{``        ``// Vector to store half``        ``// of the divisors``        ``int``[] v = ``new` `int``[n];``        ``int` `t = 0;``        ``for` `(``int` `i = 1;``             ``i <= Math.Sqrt(n); i++) {``            ``if` `(n % i == 0) {` `                ``// check if divisors are equal``                ``if` `(n / i == i)``                    ``Console.Write(i + ``" "``);``                ``else` `{``                    ``Console.Write(i + ``" "``);` `                    ``// push the second divisor``                    ``// in the vector``                    ``v[t++] = n / i;``                ``}``            ``}``        ``}` `        ``// The vector will be``        ``// printed in reverse``        ``for` `(``int` `i = t - 1; i >= 0; i--)``            ``Console.Write(v[i] + ``" "``);``    ``}` `    ``// Driver Code``    ``public` `static` `void` `Main()``    ``{``        ``Console.Write(``"The divisors of 100 are: \n"``);``        ``printDivisors(100);``    ``}``}` `// This code is contributed``// by ChitraNayal`

## PHP

 `= 0; ``\$i``--)``        ``echo` `\$v``[``\$i``] . ``" "``;``}` `// Driver code``echo` `"The divisors of 100 are: \n"``;``printDivisors(100);` `// This code is contributed by mits``?>`

## Javascript

 ``
Output
`The divisors of 100 are: n1 2 4 5 10 20 25 50 100 `

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

A O(sqrt(n)) Time and O(1) Space Solution :

## C++

 `// A O(sqrt(n)) program that prints all divisors``// in sorted order``#include ``#include ``using` `namespace` `std;` `// Function to print the divisors``void` `printDivisors(``int` `n)``{``    ``int` `i;``    ``for` `(i = 1; i * i < n; i++) {``        ``if` `(n % i == 0)``            ``cout<= 1; i--) {``        ``if` `(n % i == 0)``            ``cout<

## C

 `// A O(sqrt(n)) program that prints all divisors``// in sorted order``#include ``#include ` `// function to print the divisors``void` `printDivisors(``int` `n)``{ ``int` `i;``    ``for` `( i = 1; i*i < n; i++) {``        ``if` `(n % i == 0)``            ``printf``(``"%d "``, i);``    ``}``   ``if``(i-(n/i)==1)``    ``{``      ``i--;``    ``}``    ``for` `(; i >= 1; i--) {``        ``if` `(n % i == 0)``            ``printf``(``"%d "``, n / i);``    ``}``}` `/* Driver program to test above function */``int` `main()``{``    ``printf``(``"The divisors of 100 are: \n"``);``    ``printDivisors(100);``    ``return` `0;``}`

## Java

 `// A O(sqrt(n)) program that prints all``// divisors in sorted order``import` `java.lang.Math;` `class` `GFG{``    ` `// Function to print the divisors``public` `static` `void` `printDivisors(``int` `n)``{ ``int` `i;``    ``for``( i = ``1``; i * i < n; i++)``    ``{``        ``if` `(n % i == ``0``)``            ``System.out.print(i + ``" "``);``    ``}``    ``if``(i-(n/i)==``1``)``    ``{``      ``i--;``    ``}``    ``for``(; i >= ``1``; i--)``    ``{``        ``if` `(n % i == ``0``)``            ``System.out.print(n / i + ``" "``);``    ``}``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``System.out.println(``"The divisors of 100 are: "``);``    ` `    ``printDivisors(``100``);``}``}` `// This code is contributed by Prakash Veer Singh Tomar.`

## Python3

 `# A O(sqrt(n)) program that prints all divisors``# in sorted order``from` `math ``import` `*` `# Function to print the divisors``def` `printDivisors (n):` `    ``i ``=` `1``    ``while` `(i ``*` `i < n):``        ``if` `(n ``%` `i ``=``=` `0``):``            ``print``(i, end ``=` `" "``)` `        ``i ``+``=` `1` `    ``for` `i ``in` `range``(``int``(sqrt(n)), ``0``, ``-``1``):``        ``if` `(n ``%` `i ``=``=` `0``):``            ``print``(n ``/``/` `i, end ``=` `" "``)` `# Driver Code``print``(``"The divisors of 100 are: "``)` `printDivisors(``100``)` `# This code is contributed by himanshu77`

## C#

 `// A O(sqrt(n)) program that prints``// all divisors in sorted order``using` `System;``using` `System.Collections;``using` `System.Collections.Generic;` `class` `GFG{` `// Function to print the divisors``static` `void` `printDivisors(``int` `n)``{``    ``for``(``int` `i = 1; i * i < n; i++)``    ``{``        ``if` `(n % i == 0)``            ``Console.Write(i + ``" "``);``    ``}``    ``for``(``int` `i = (``int``)Math.Sqrt(n); i >= 1; i--)``    ``{``        ``if` `(n % i == 0)``            ``Console.Write(n / i + ``" "``);``    ``}``} `` ` `// Driver code  ``public` `static` `void` `Main(``string` `[]arg)``{``    ``Console.Write(``"The divisors of 100 are: \n"``);``    ` `    ``printDivisors(100);``}``}` `// This code is contributed by rutvik_56`

## Javascript

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

Thanks to Mysterious Mind for suggesting the above solution.

The if condition between the two loops is used when corner factors in loops condition have a difference of 1(example- factors of 30 (5,6)here,5 will be printed two times; to resolve that issue this step is required.