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

Input:6Output:1 2 3 6ExplanationDivisors of 6 are: 1, 2, 3, 6Input:10Output:1 2 5 10

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

`#include <vector>`

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