Skip to content
Related Articles

Related Articles

Queries to print all divisors of number
  • Difficulty Level : Medium
  • Last Updated : 23 Dec, 2017
GeeksforGeeks - Summer Carnival Banner

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

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.




    My Personal Notes arrow_drop_up
Recommended Articles
Page :