Count of the non-prime divisors of a given number - GeeksforGeeks

19 May, 2021
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 a product of its prime factors as 
 
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 factors that are 
 
Therefore, the count of the non-prime factors will be: 
 
Below is the implementation of the above approach: 
C++
Java
Python3
C#
Javascript
// 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// numbervector<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 numberint 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 Codeint main(){    int N = 8;     // Function Call    cout << nonPrimeDivisors(N) << endl;    return 0;}
// Java program to find// count of non-prime// divisors of given numberimport java.util.*;class GFG{ // Function to factors// of the given numberstatic Vector<Integer> getFactorization(int x){  int count = 0;  Vector<Integer> v = new Vector<>();   // Loop to find the  // divisors of the number 2  while (x % 2 == 0)  {    count++;    x = x / 2;  }     if (count != 0)    v.add(count);   // Loop to find the divisors  // of the given number upto SQRT(N)  for (int i = 3;           i <= Math.sqrt(x); i += 2)  {    count = 0;    while (x % i == 0)    {      count++;      x /= i;    }         if (count != 0)      v.add(count);  }   // Condition to check if  // the rest number is also  // a prime number  if (x > 1)  {    v.add(1);  }  return v;} // Function to find the non-prime// divisors of the given numberstatic int nonPrimeDivisors(int N){  Vector<Integer> 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.get(i) + 1);   ret = ret - v.size();  return ret;} // Driver Codepublic static void main(String[] args){  int N = 8;   // Function Call  System.out.println(nonPrimeDivisors(N));}} // This code is contributed by shikhasingrajput
# Python3 program to find count of# non-prime divisors of given numberfrom math import sqrt # Function to factors of the given# numberdef 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 numberdef 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 Codeif __name__ == '__main__':         N = 8     # Function Call    print(nonPrimeDivisors(N)) # This code is contributed by Samarth
// C# program to find// count of non-prime// divisors of given numberusing System;using System.Collections.Generic;class GFG{ // Function to factors// of the given numberstatic List<int> getFactorization(int x){  int count = 0;  List<int> v = new List<int>();   // Loop to find the  // divisors of the number 2  while (x % 2 == 0)  {    count++;    x = x / 2;  }     if (count != 0)    v.Add(count);   // Loop to find the divisors  // of the given number upto  // SQRT(N)  for (int i = 3;           i <= Math.Sqrt(x); i += 2)  {    count = 0;    while (x % i == 0)    {      count++;      x /= i;    }         if (count != 0)      v.Add(count);  }   // Condition to check if  // the rest number is also  // a prime number  if (x > 1)  {    v.Add(1);  }  return v;} // Function to find the non-prime// divisors of the given numberstatic int nonPrimeDivisors(int N){  List<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.Count; i++)    ret = ret * (v[i] + 1);   ret = ret - v.Count;  return ret;} // Driver Codepublic static void Main(String[] args){  int N = 8;   // Function Call  Console.WriteLine(nonPrimeDivisors(N));}} // This code is contributed by gauravrajput1
<script> // Javascript program to find// count of non-prime// divisors of given number // Function to factors// of the given numberfunction getFactorization(x){      let count = 0;      let v = [];        // Loop to find the      // divisors of the number 2      while (x % 2 == 0)      {        count++;        x = Math.floor(x / 2);      }          if (count != 0)        v.push(count);        // Loop to find the divisors      // of the given number upto      // SQRT(N)      for (let i = 3;        i <= Math.floor(Math.sqrt(x)); i += 2)      {        count = 0;        while (x % i == 0)        {              count++;              x = Math.floor(x / i);        }              if (count != 0)          v.push(count);      }        // Condition to check if      // the rest number is also      // a prime number      if (x > 1)      {        v.push(1);      }      return v;}  // Function to find the non-prime// divisors of the given numberfunction nonPrimeDivisors(N){      let v = getFactorization(N);      let ret = 1;        // Loop to count the number of      // the total divisors of given number      for (let i = 0; i < v.length; i++)        ret = ret * (v[i] + 1);        ret = ret - v.length;      return ret;} // Driver Code         let N = 8;    // Function Call  document.write(nonPrimeDivisors(N));     </script>
3
 
ipg2016107
ShubhamShekhaliya
shikhasingrajput
GauravRajput1
code_hunt
divisors
Prime Number
Articles
Competitive Programming
Mathematical
Mathematical
Prime Number
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Mutex vs Semaphore
Understanding "extern" keyword in C
Time Complexity and Space Complexity
SQL | Views
Analysis of Algorithms | Set 2 (Worst, Average and Best Cases)
Practice for cracking any coding interview
Arrow operator -> in C/C++ with Examples
Competitive Programming - A Complete Guide
Modulo 10^9+7 (1000000007)
Top 10 Algorithms and Data Structures for Competitive Programming