# Sum of product of all subsets formed by only divisors of N

Given a number **N**, the task is to find the sum of the product of elements of all the possible subsets formed by only divisors of **N**.

**Examples:**

Input:N = 3

Output:7

Explanation:

Divisors of 3 are 1 and 3. All possible subsets are {1}, {3}, {1, 3}.

Therefore, the sum of the product of all possible subsets are:

(1 + 3 + (1 * 3)) = 7.

Input:N = 4

Output:29

Explanation:

Divisors of 4 are 1, 2 and 4. All possible subsets are {1}, {2}, {4}, {1, 2}, {1, 4}, {2, 4}, {1, 2, 4}.

Therefore, the sum of the product of all possible subsets are:

(1 + 2 + 4 + (1 * 2) + (1 * 4) + (2 * 4) + (1 * 2 * 4)) = 29.

**Naive Approach:** The naive approach for this problem is to generate all possible subsets from its divisors and then calculate the product of each of the subset. After calculating the product of every subset, add all the products to find the required answer. The time complexity for this approach is **O(2 ^{D})** where D is the number of divisors of N.

**Efficient Approach:** The idea behind the efficient approach comes from the following observation:

Let x and y is the divisor of N. Then sum of product of all subsets will be = x + y + x * y = x(1 + y) + y + 1 - 1 = x(1 + y) + (1 + y) - 1 = (x + 1) * (y + 1) - 1 = (1 + x) * (1 + y) - 1 Now let take three divisors x, y, z. Then sum of product of all subsets will be = x + y + z + xy + yz + zx + xyz = x + xz + y + yz + xy + xyz + z + 1 - 1 = x(1 + z) + y(1 + z) + xy(1 + z) + z + 1 - 1 = (x + y + xy + 1) * (1 + z) - 1 = (1 + x) * (1 + y) * (1 + z) - 1

Clearly, from the above observation, we can conclude that if **{D _{1}, D_{2}, D_{3}, … D_{n}}** are the divisors of N then the required answer will be:

(D_{1}+ 1) * (D_{2}+ 1) * (D_{3}+ 1) * ... (D_{n}+ 1)

Below is the implementation of the above approach:

## C++

`// C++ program to find the sum of ` `// product of all the subsets ` `// formed by only divisors of N ` ` ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to find the sum of ` `// product of all the subsets ` `// formed by only divisors of N ` `int` `GetSum(` `int` `n) ` `{ ` ` ` ` ` `// Vector to store all the ` ` ` `// divisors of n ` ` ` `vector<` `int` `> divisors; ` ` ` ` ` `// Loop to find out the ` ` ` `// divisors of N ` ` ` `for` `(` `int` `i = 1; i * i <= n; i++) { ` ` ` `if` `(n % i == 0) { ` ` ` ` ` `// Both 'i' and 'n/i' are the ` ` ` `// divisors of n ` ` ` `divisors.push_back(i); ` ` ` ` ` `// Check if 'i' and 'n/i' are ` ` ` `// equal or not ` ` ` `if` `(i != n / i) { ` ` ` `divisors.push_back(n / i); ` ` ` `} ` ` ` `} ` ` ` `} ` ` ` ` ` `int` `ans = 1; ` ` ` ` ` `// Calculating the answer ` ` ` `for` `(` `auto` `i : divisors) { ` ` ` `ans *= (i + 1); ` ` ` `} ` ` ` ` ` `// Excluding the value ` ` ` `// of the empty set ` ` ` `ans = ans - 1; ` ` ` ` ` `return` `ans; ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` ` ` `int` `N = 4; ` ` ` ` ` `cout << GetSum(N) << endl; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to find the sum of product ` `// of all the subsets formed by only ` `// divisors of N ` `import` `java.util.*; ` `class` `GFG { ` ` ` `// Function to find the sum of product ` `// of all the subsets formed by only ` `// divisors of N ` `static` `int` `GetSum(` `int` `n) ` `{ ` ` ` ` ` `// Vector to store all the ` ` ` `// divisors of n ` ` ` `Vector<Integer> divisors = ` `new` `Vector<Integer>(); ` ` ` ` ` `// Loop to find out the ` ` ` `// divisors of N ` ` ` `for` `(` `int` `i = ` `1` `; i * i <= n; i++) ` ` ` `{ ` ` ` `if` `(n % i == ` `0` `) ` ` ` `{ ` ` ` ` ` `// Both 'i' and 'n/i' are the ` ` ` `// divisors of n ` ` ` `divisors.add(i); ` ` ` ` ` `// Check if 'i' and 'n/i' are ` ` ` `// equal or not ` ` ` `if` `(i != n / i) ` ` ` `{ ` ` ` `divisors.add(n / i); ` ` ` `} ` ` ` `} ` ` ` `} ` ` ` ` ` `int` `ans = ` `1` `; ` ` ` ` ` `// Calculating the answer ` ` ` `for` `(` `int` `i = ` `0` `; i < divisors.size(); i++) ` ` ` `{ ` ` ` `ans *= (divisors.get(i) + ` `1` `); ` ` ` `} ` ` ` ` ` `// Excluding the value ` ` ` `// of the empty set ` ` ` `ans = ans - ` `1` `; ` ` ` ` ` `return` `ans; ` `} ` ` ` `// Driver code ` `public` `static` `void` `main(String[] args) ` `{ ` ` ` `int` `N = ` `4` `; ` ` ` ` ` `System.out.println(GetSum(N)); ` `} ` `} ` ` ` `// This code is contributed by offbeat ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to find the sum of ` `# product of all the subsets ` `# formed by only divisors of N ` ` ` `# Function to find the sum of ` `# product of all the subsets ` `# formed by only divisors of N ` `def` `GetSum(n): ` ` ` ` ` `# Vector to store all the ` ` ` `# divisors of n ` ` ` `divisors ` `=` `[] ` ` ` ` ` `# Loop to find out the ` ` ` `# divisors of N ` ` ` `i ` `=` `1` ` ` `while` `i ` `*` `i <` `=` `n : ` ` ` `if` `(n ` `%` `i ` `=` `=` `0` `): ` ` ` ` ` `# Both 'i' and 'n/i' are the ` ` ` `# divisors of n ` ` ` `divisors.append(i) ` ` ` ` ` `# Check if 'i' and 'n/i' are ` ` ` `# equal or not ` ` ` `if` `(i !` `=` `n ` `/` `/` `i): ` ` ` `divisors.append(n ` `/` `/` `i) ` ` ` ` ` `i ` `+` `=` `1` ` ` `ans ` `=` `1` ` ` ` ` `# Calculating the answer ` ` ` `for` `i ` `in` `divisors: ` ` ` `ans ` `*` `=` `(i ` `+` `1` `) ` ` ` ` ` `# Excluding the value ` ` ` `# of the empty set ` ` ` `ans ` `=` `ans ` `-` `1` ` ` `return` `ans ` ` ` `# Driver Code ` `if` `__name__ ` `=` `=` `"__main__"` `: ` ` ` ` ` `N ` `=` `4` ` ` `print` `(GetSum(N)) ` ` ` `# This code is contributed by chitranayal ` |

*chevron_right*

*filter_none*

**Output:**

29

**Time Complexity:** *O(sqrt(N))*, where N is the given number.

## Recommended Posts:

- Product of all Subsets of a set formed by first N natural numbers
- Sum of sum of all subsets of a set formed by first N natural numbers
- Sum of all subsets of a set formed by first n natural numbers
- Number of subsets with product less than k
- Product of values of all possible non-empty subsets of given Array
- Total number of subsets in which the product of the elements is even
- Check if a number can be expressed as a product of exactly K prime divisors
- Sum of product of proper divisors of all Numbers lying in range [L, R]
- Subsets of size K with product equal to difference of two perfect squares
- Queries for Count of divisors of product of an Array in given range | Set 2 (MO's Algorithm)
- Product of all sorted subsets of size K using elements whose index divide K completely
- Sum of series formed by difference between product and sum of N natural numbers
- Number formed by adding product of its max and min digit K times
- Nth term of a sequence formed by sum of current term with product of its largest and smallest digit
- Partition an array of non-negative integers into two subsets such that average of both the subsets is equal
- Divide array in two Subsets such that sum of square of sum of both subsets is maximum
- Maximum possible prime divisors that can exist in numbers having exactly N divisors
- Find sum of divisors of all the divisors of a natural number
- Find sum of inverse of the divisors when sum of divisors and the number is given
- Sum of subsets of all the subsets of an array | O(3^N)

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.