Sunday, January 12, 2025
Google search engine
HomeData Modelling & AISuper Niven Numbers

Super Niven Numbers

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 total 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 store 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 total 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 store 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 total 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 total 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 store 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 total 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 representation 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 store 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>


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 total 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 store 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 total 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<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 total 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 total 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




<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 total 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 representation 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>


 

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments