Queries to print all divisors of number

• Difficulty Level : Medium
• Last Updated : 23 Dec, 2017

Given a positive integer ‘n’ and query ‘q’. Print all the divisors of number ‘n’.

```Input: 6
Output: 1 2 3 6
Explanation
Divisors of 6 are: 1, 2, 3, 6

Input: 10
Output: 1 2 5 10
```

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Naive approach is to iterate through 1 to sqrt(n) for every query ‘q’ and print the divisors accordingly. See this to understand more. Time complexity of this approach is q*sqrt(n) which is not sufficient for large number of queries.

Efficient approach is to use factorization by using sieve base approach.

• Create a list of consecutive integers from 1 to ‘n’.
• For any number ‘d’, iterate through all the multiples of ‘d’ i.e., d, 2d, 3d, … etc. Meanwhile push the divisor ‘d’ for every multiples.
 `// C++ program to print divisors of``// number for multiple query``#include ``#include ``using` `namespace` `std;`` ` `const` `int` `MAX = 1e5;`` ` `// Initialize global divisor vector``// array of sequence container``vector<``int``> divisor[MAX + 1];`` ` `// Sieve based approach to pre-``// calculate all divisors of number``void` `sieve()``{``    ``for` `(``int` `i = 1; i <= MAX; ++i) {``        ``for` `(``int` `j = i; j <= MAX; j += i)``            ``divisor[j].push_back(i);``    ``}``}`` ` `// Utility function to print divisors``// of given number``inline` `void` `printDivisor(``int``& n)``{``    ``for` `(``auto``& ``div` `: divisor[n])``        ``cout << ``div` `<< ``" "``;``}`` ` `// Driver code``int` `main()``{``    ``sieve();`` ` `    ``int` `n = 10;``    ``cout << ``"Divisors of "` `<< n << ``" = "``;``    ``printDivisor(n);`` ` `    ``n = 30;``    ``cout << ``"\nDivisors of "` `<< n << ``" = "``;``    ``printDivisor(n);``    ``return` `0;``}`
```Output
Divisors of 10 = 1 2 5 10
Divisors of 30 = 1 2 3 5 6 10 15 303
```

Time complexity: O(len) for each query, where len is equal to total divisors of number ‘n’.
Auxiliary space: O(MAX)

My Personal Notes arrow_drop_up