Skip to content
Related Articles

Related Articles

Count of the non-prime divisors of a given number
  • Difficulty Level : Medium
  • Last Updated : 06 Nov, 2020

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:
Explanation: 
Divisors of 8 are – {1, 2, 4, 8} 
Non-Prime Divisors – {1, 4, 8}
Input: N = 20 
Output:
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 

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 
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++




// 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;
}

Java




// Java program to find
// count of non-prime
// divisors of given number
import java.util.*;
class GFG{
 
// Function to factors
// of the given number
static 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 number
static 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 Code
public static void main(String[] args)
{
  int N = 8;
 
  // Function Call
  System.out.println(nonPrimeDivisors(N));
}
}
 
// This code is contributed by shikhasingrajput

Python3




# 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

C#




// C# program to find
// count of non-prime
// divisors of given number
using System;
using System.Collections.Generic;
class GFG{
 
// Function to factors
// of the given number
static 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 number
static 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 Code
public static void Main(String[] args)
{
  int N = 8;
 
  // Function Call
  Console.WriteLine(nonPrimeDivisors(N));
}
}
 
// This code is contributed by gauravrajput1
Output: 
3






 

competitive-programming-img

My Personal Notes arrow_drop_up
Recommended Articles
Page :