Skip to content
Related Articles

Related Articles

Improve Article

Super Niven Numbers

  • Last Updated : 03 Jun, 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.

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 <bits/stdc++.h>
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 reprsentation 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<Integer> 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 reprsentation 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<Integer> digits = new Vector<Integer>();
 
    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 reprsentation 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 reprsentation 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




<script>
 
// Javascript 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
function isDivBySubsetSums(arr, num)
{
    // to calculate length of array arr
    var n = arr.length;
 
    // There are totoal 2^n subsets
    var total = 1 << n;
 
    // Consider all numbers from 0 to 2^n - 1
    for (var i = 0; i < total; i++) {
        var sum = 0;
 
        // Consider binary reprsentation of
        // current i to decide which elements
        // to pick.
        for (var 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
function isSuperNivenNum(n)
{
    var temp = n;
    // to stor digits of N
    var digits = [];
 
    while (n != 0) {
        var digit = n % 10;
        digits.push(digit);
        n = parseInt(n / 10);
    }
 
    return isDivBySubsetSums(digits, temp);
}
 
// Driver code
var n = 500;
if (isSuperNivenNum(n))
    document.write("yes");
else
    document.write("No");
 
 
</script>
Output: 
yes

 

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.




My Personal Notes arrow_drop_up
Recommended Articles
Page :