# Find all divisors of a natural number | Set 2

• Difficulty Level : Easy
• Last Updated : 11 Jan, 2022

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

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.