Count of the non-prime divisors of a given number

Given a number N, the task is to find the count of non-prime divisors of the given number N.

Examples:

Input: N = 8
Output: 3
Explanation:
Divisors of 8 are – {1, 2, 4, 8}
Non-Prime Divisors – {1, 4, 8}

Input: N = 20
Output: 4
Explanation:
Divisors of 20 are – {1, 2, 4, 5, 10, 20}
Non-Prime Divisors – {1, 4, 10, 20}

Approach: The key observation in the problem is that any number can be written as product of its prime factors as  N=\prod_{i=1}^Ka_{i}^{b_i} where K is the count of the prime factors of the given number. Using permutation and combination we can find that the total count of the prime factors that is  \prod_{i=1}^k{(b_i + 1)} .



Therefore, the count of the non-prime factors will be:

\text{Count of Non-prime factors = } \prod_{i=1}^k{(b_i + 1)} - k

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find count of
// non-prime divisors of given number
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to factors of the given
// number
vector<int> getFactorization(int x)
{
    int count = 0;
    vector<int> v;
  
    // Loop to find the divisors of
    // the number 2
    while (x % 2 == 0) {
        count++;
        x = x / 2;
    }
    if (count != 0)
        v.push_back(count);
  
    // Loop to find the divisors of the
    // given number upto SQRT(N)
    for (int i = 3; i <= sqrt(x); i += 2) {
        count = 0;
        while (x % i == 0) {
            count++;
            x /= i;
        }
        if (count != 0)
            v.push_back(count);
    }
  
    // Condition to check if the rest
    // number is also a prime number
    if (x > 1) {
        v.push_back(1);
    }
    return v;
}
  
// Function to find the non-prime
// divisors of the given number
int nonPrimeDivisors(int N)
{
    vector<int> v = getFactorization(N);
    int ret = 1;
  
    // Loop to count the number of
    // the total divisors of given number
    for (int i = 0; i < v.size(); i++)
        ret = ret * (v[i] + 1);
  
    ret = ret - v.size();
    return ret;
}
  
// Driver Code
int main()
{
    int N = 8;
  
    // Function Call
    cout << nonPrimeDivisors(N) << endl;
    return 0;
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find count of
# non-prime divisors of given number
from math import sqrt
  
# Function to factors of the given
# number
def getFactorization(x):
      
    count = 0
    v = []
  
    # Loop to find the divisors of
    # the number 2
    while (x % 2 == 0):
        count += 1
        x = x // 2
  
    if (count != 0):
        v.append(count)
  
    # Loop to find the divisors of the
    # given number upto SQRT(N)
    for i in range(3, int(sqrt(x)) + 12):
        count = 0
          
        while (x % i == 0):
            count += 1
            x //= i
              
        if (count != 0):
            v.append(count)
  
    # Condition to check if the rest
    # number is also a prime number
    if (x > 1):
        v.append(1)
          
    return v
  
# Function to find the non-prime
# divisors of the given number
def nonPrimeDivisors(N):
      
    v = getFactorization(N)
    ret = 1
  
    # Loop to count the number of
    # the total divisors of given number
    for i in range(len(v)):
        ret = ret * (v[i] + 1)
    ret = ret - len(v)
      
    return ret
  
# Driver Code
if __name__ == '__main__':
      
    N = 8
  
    # Function Call
    print(nonPrimeDivisors(N))
  
# This code is contributed by Samarth

chevron_right


Output:

3

competitive-programming-img




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : ipg2016107