Related Articles

Related Articles

Count of multiplicative partitions of N
  • Last Updated : 28 Jul, 2020

Given an integer N, the task is to find the total number of multiplicative partition for N.

Multiplicative Partition: Number of ways of factoring of an integer with all factors greater than 1.
 

Examples: 

Input: N = 20 
Output:
Explanation: 
Multiplicative partitions of 20 are: 
2 × 2 × 5 = 2 × 10 = 4 × 5 = 20.
Input: N = 30 
Output:
Explanation: 
Multiplicative partitions of 30 are: 
2 × 3 × 5 = 2 × 15 = 6 × 5 = 3 × 10 = 30 
 

 

Approach: The idea is to try for every divisor of the N and then recursively break the dividend to get the multiplicative partitions. Below are the illustrations of the steps of approach:



  • Initialize minimum factor as 2. Since it is the minimum factor other than 1.
  • Start a loop from i = minimum to N – 1, and check if the number divides N and N/i > i, then increment the counter by 1 and again call the same function. Since, i divides n so it means i and N/i can be factorized some more times.

For Example:

If N = 30, let i = min = 2 
30 % 2 = 0, so again recur with (2, 15) 
15 % 3 = 0, so again recur with (3, 5) 


and so on. 
 

Below is the implementation of the above approach:
 

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation to find
// the multiplicative partitions of
// the given number N
#include <bits/stdc++.h>
using namespace std;
  
// Function to return number of ways
// of factoring N with all
// factors greater than 1
static int getDivisors(int min, int n)
{
      
    // Variable to store number of ways
    // of factoring n with all
    // factors greater than 1
    int total = 0;
      
    for(int i = min; i < n; ++i)
    {
        if (n % i == 0 && n / i >= i)
        {
            ++total;
            if (n / i > i)
                total += getDivisors(i, n / i);
        }
    }
    return total;
}
  
// Driver code
int main()
{
    int n = 30;
      
    // 2 is the minimum factor of
    // number other than 1.
    // So calling recursive
    // function to find
    // number of ways of factoring N
    // with all factors greater than 1
    cout << 1 + getDivisors(2, n);
      
    return 0;
}
  
// This code is contributed by rutvik_56

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation to find
// the multiplicative partitions of
// the given number N
  
class MultiPart {
  
    // Function to return number of ways
    // of factoring N with all
    // factors greater than 1
    static int getDivisors(int min, int n)
    {
  
        // Variable to store number of ways
        // of factoring n with all
        // factors greater than 1
        int total = 0;
  
        for (int i = min; i < n; ++i)
  
            if (n % i == 0 && n / i >= i) {
                ++total;
                if (n / i > i)
                    total
                        += getDivisors(
                            i, n / i);
            }
  
        return total;
    }
  
    // Driver Code
    public static void main(String[] args)
    {
        int n = 30;
  
        // 2 is the minimum factor of
        // number other than 1.
        // So calling recursive
        // function to find
        // number of ways of factoring N
        // with all factors greater than 1
        System.out.println(
            1 + getDivisors(2, n));
    }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation to find
# the multiplicative partitions of
# the given number N
  
# Function to return number of ways
# of factoring N with all
# factors greater than 1
def getDivisors(min, n):
      
    # Variable to store number of ways
    # of factoring n with all
    # factors greater than 1
    total = 0
  
    for i in range(min, n):
        if (n % i == 0 and n // i >= i):
            total += 1
            if (n // i > i):
                total += getDivisors(i, n // i)
                  
    return total
  
# Driver code
if __name__ == '__main__':
    
    n = 30
  
    # 2 is the minimum factor of
    # number other than 1.
    # So calling recursive
    # function to find
    # number of ways of factoring N
    # with all factors greater than 1
    print(1 + getDivisors(2, n))
  
# This code is contributed by mohit kumar 29

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation to find
// the multiplicative partitions of
// the given number N
using System;
  
class GFG{ 
      
// Function to return number of ways
// of factoring N with all
// factors greater than 1 
static int getDivisors(int min, int n)
{
  
    // Variable to store number of ways
    // of factoring n with all
    // factors greater than 1
    int total = 0;
  
    for(int i = min; i < n; ++i)
        if (n % i == 0 && n / i >= i)
        {
            ++total;
            if (n / i > i)
                total+= getDivisors(i, n / i);
        }
  
    return total;
  
// Driver code 
public static void Main() 
    int n = 30;
  
    // 2 is the minimum factor of
    // number other than 1.
    // So calling recursive
    // function to find
    // number of ways of factoring N
    // with all factors greater than 1
    Console.Write(1 + getDivisors(2, n));
  
// This code is contributed by adityakumar27200

chevron_right


Output: 

5

 

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 :