# Super Niven Numbers

• Last Updated : 11 Oct, 2021

Super Niven Number is a number N if it is divisible not only by the sum of its digits but also by the sum of any subset of its (nonzero) digits.
For example:

68040 is a Super Niven Number because it is divisible by 6, 8, 4, 6+8, 6+4, 4+8 and 6+4+8.

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

### Check if N is a Super Niven number

Given a number N, the task is to check if N is a Super Niven Number or not. If N is a Super Niven Number then print “Yes” else print “No”.
Examples:

Input: N = 68040
Output: Yes
Explanation:
68040 is divisible by 6, 8, 4, 6+8, 6+4, 4+8 and 6+4+8.
and N begins also with ’25’.
Input: N = 72
Output: No

Approach: :

1. We will store all the digits of the Number N in an array arr
2. Now We will find the sum of every subset of the array and check if the number N is divisible by all subset or not
3. If N is not divisible by any of the subsets then return false else return true at last.

Below is the implementation of the above approach:

## C++

 `// C++ implementation to check if a number``// is Super Niven Number or not.` `#include ``using` `namespace` `std;` `// Checks if sums of all subsets of digits array``// divides the number N``bool` `isDivBySubsetSums(vector<``int``> arr, ``int` `num)``{``    ``// to calculate length of array arr``    ``int` `n = arr.size();` `    ``// There are totoal 2^n subsets``    ``long` `long` `total = 1 << n;` `    ``// Consider all numbers from 0 to 2^n - 1``    ``for` `(``long` `long` `i = 0; i < total; i++) {``        ``long` `long` `sum = 0;` `        ``// Consider binary representation of``        ``// current i to decide which elements``        ``// to pick.``        ``for` `(``int` `j = 0; j < n; j++)``            ``if` `(i & (1 << j))``                ``sum += arr[j];` `        ``// check sum of picked elements.``        ``if` `(sum != 0 && num % sum != 0)``            ``return` `false``;``    ``}``    ``return` `true``;``}` `// Function to check if a number is``// a super-niven number``bool` `isSuperNivenNum(``int` `n)``{``    ``int` `temp = n;``    ``// to stor digits of N``    ``vector<``int``> digits;` `    ``while` `(n != 0) {``        ``int` `digit = n % 10;``        ``digits.push_back(digit);``        ``n = n / 10;``    ``}` `    ``return` `isDivBySubsetSums(digits, temp);``}` `// Driver code``int` `main()``{``    ``int` `n = 500;``    ``if` `(isSuperNivenNum(n))``        ``cout << ``"yes"``;``    ``else``        ``cout << ``"No"``;``    ``return` `0;``}`

## Java

 `// Java implementation to check if a number``// is Super Niven Number or not.``import` `java.util.*;``class` `GFG{` `// Checks if sums of all subsets of digits array``// divides the number N``static` `boolean` `isDivBySubsetSums(Vector arr,``                                             ``int` `num)``{``    ``// to calculate length of array arr``    ``int` `n = arr.size();` `    ``// There are totoal 2^n subsets``    ``long` `total = ``1` `<< n;` `    ``// Consider all numbers from 0 to 2^n - 1``    ``for` `(``long` `i = ``0``; i < total; i++)``    ``{``        ``long` `sum = ``0``;` `        ``// Consider binary representation of``        ``// current i to decide which elements``        ``// to pick.``        ``for` `(``int` `j = ``0``; j < n; j++)``            ``if` `((i & (``1` `<< j)) > ``0``)``                ``sum += arr.get(j);` `        ``// check sum of picked elements.``        ``if` `(sum != ``0` `&& num % sum != ``0``)``            ``return` `false``;``    ``}``    ``return` `true``;``}` `// Function to check if a number is``// a super-niven number``static` `boolean` `isSuperNivenNum(``int` `n)``{``    ``int` `temp = n;``    ``// to stor digits of N``    ``Vector digits = ``new` `Vector();` `    ``while` `(n != ``0``)``    ``{``        ``int` `digit = n % ``10``;``        ``digits.add(digit);``        ``n = n / ``10``;``    ``}` `    ``return` `isDivBySubsetSums(digits, temp);``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``int` `n = ``500``;``    ``if` `(isSuperNivenNum(n))``        ``System.out.print(``"yes"``);``    ``else``        ``System.out.print(``"No"``);``}``}` `// This code is contributed by Amit Katiyar`

## Python3

 `# Python3 implementation to check if a``# number is Super Niven Number or not.` `# Checks if sums of all subsets of digits``# array divides the number N``def` `isDivBySubsetSums(arr, num):` `    ``# To calculate length of array arr``    ``n ``=` `len``(arr)` `    ``# There are totoal 2^n subsets``    ``total ``=` `1` `<< n` `    ``# Consider all numbers from 0 to 2^n - 1``    ``i ``=` `0``    ``while` `i < total:``        ``sum` `=` `0` `        ``# Consider binary representation of``        ``# current i to decide which elements``        ``# to pick.``        ``j ``=` `0``        ``while` `j < n:``            ``if` `(i & (``1` `<< j)):``                ``sum` `+``=` `arr[j]``                ` `            ``j ``+``=` `1` `        ``# Check sum of picked elements.``        ``if` `(``sum` `!``=` `0``) ``and` `(num ``%` `sum` `!``=` `0``):``            ``return` `False``            ` `        ``i ``+``=` `1``        ` `    ``return` `True` `# Function to check if a number is``# a super-niven number``def` `isSuperNivenNum(n):` `    ``temp ``=` `n``    ` `    ``# To store digits of N``    ``digits ``=` `[]``    ` `    ``while` `(n > ``1``):``        ``digit ``=` `int``(n) ``%` `10``        ``digits.append(digit)``        ``n ``=` `n ``/` `10` `    ``return` `isDivBySubsetSums(digits, temp)` `# Driver code``if` `__name__ ``=``=` `'__main__'``:` `    ``n ``=` `500``    ` `    ``if` `isSuperNivenNum(n):``        ``print``(``"Yes"``)``    ``else``:``        ``print``(``"No"``)` `# This code is contributed by jana_sayantan`

## C#

 `// C# implementation to check if a number``// is Super Niven Number or not.``using` `System;``using` `System.Collections.Generic;` `class` `GFG{`` ` `// Checks if sums of all subsets of digits array``// divides the number N``static` `bool` `isDivBySubsetSums(List<``int``> arr,``                                   ``int` `num)``{``    ``// to calculate length of array arr``    ``int` `n = arr.Count;`` ` `    ``// There are totoal 2^n subsets``    ``long` `total = 1 << n;`` ` `    ``// Consider all numbers from 0 to 2^n - 1``    ``for` `(``long` `i = 0; i < total; i++)``    ``{``        ``long` `sum = 0;`` ` `        ``// Consider binary representation of``        ``// current i to decide which elements``        ``// to pick.``        ``for` `(``int` `j = 0; j < n; j++)``            ``if` `((i & (1 << j)) > 0)``                ``sum += arr[j];`` ` `        ``// check sum of picked elements.``        ``if` `(sum != 0 && num % sum != 0)``            ``return` `false``;``    ``}``    ``return` `true``;``}`` ` `// Function to check if a number is``// a super-niven number``static` `bool` `isSuperNivenNum(``int` `n)``{``    ``int` `temp = n;``    ``// to stor digits of N``    ``List<``int``> digits = ``new` `List<``int``>();`` ` `    ``while` `(n != 0)``    ``{``        ``int` `digit = n % 10;``        ``digits.Add(digit);``        ``n = n / 10;``    ``}``    ``return` `isDivBySubsetSums(digits, temp);``}`` ` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ``int` `n = 500;``    ``if` `(isSuperNivenNum(n))``        ``Console.Write(``"yes"``);``    ``else``        ``Console.Write(``"No"``);``}``}` `// This code is contributed by gauravrajput1`

## Javascript

 ``
Output:
`yes`

My Personal Notes arrow_drop_up