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: :
- We will store all the digits of the Number N in an array arr
- 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
- 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++ 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 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 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# 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 |
<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++ 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 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 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# 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 |
<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> |