Given a number, determine whether it is a valid Hyperperfect Number.
A number n is called k-hyperperfect if: n = 1 + k ?idi where all di are the proper divisors of n.
Taking k = 1 will give us perfect numbers.
The first few k-hyperperfect numbers are 6, 21, 28, 301, 325, 496, 697, … with the corresponding values of k being 1, 2, 1, 6, 3, 1, 12, …
Examples:
Input : N = 36, K = 1 Output : 34 is not 1-HyperPerfect Explanation: The Divisors of 36 are 2, 3, 4, 6, 9, 12, 18 the sum of the divisors is 54. For N = 36 to be 1-Hyperperfect, it would require 36 = 1 + 1(54), which we see, is invalid Input : N = 325, K = 3 Output : 325 is 3-HyperPerfect Explanation: We can use the first condition to evaluate this as K is odd and > 1 so here p = (3*k+1)/2 = 5, q = (3*k+4) = 13 p and q are both prime, so we compute p^2 * q = 5 ^ 2 * 13 = 325 Hence N is a valid HyperPerfect number
// C++ 4.3.2 program to check whether a // given number is k-hyperperfect #include <bits/stdc++.h> using namespace std;
// function to find the sum of all // proper divisors (excluding 1 and N) int divisorSum( int N, int K)
{ int sum = 0;
// Iterate only until sqrt N as we are
// going to generate pairs to produce
// divisors
for ( int i = 2 ; i <= ceil ( sqrt (N)) ; i++)
// As divisors occur in pairs, we can
// take the values i and N/i as long
// as i divides N
if (N % i == 0)
sum += ( i + N/i );
return sum;
} // Function to check whether the given number // is prime bool isPrime( int n)
{ //base and corner cases
if (n == 1 || n == 0)
return false ;
if (n <= 3)
return true ;
// Since integers can be represented as
// some 6*k + y where y >= 0, we can eliminate
// all integers that can be expressed in this
// form
if (n % 2 == 0 || n % 3 == 0)
return false ;
// start from 5 as this is the next prime number
for ( int i=5; i*i<=n; i=i+6)
if (n % i == 0 || n % ( i + 2 ) == 0)
return false ;
return true ;
} // Returns true if N is a K-Hyperperfect number // Else returns false. bool isHyperPerfect( int N, int K)
{ int sum = divisorSum(N, K);
// Condition from the definition of hyperperfect
if ((1 + K * (sum)) == N)
return true ;
else
return false ;
} // Driver function to test for hyperperfect numbers int main()
{ int N1 = 1570153, K1 = 12;
int N2 = 321, K2 = 3;
// First two statements test against the condition
// N = 1 + K*(sum(proper divisors))
if (isHyperPerfect(N1, K1))
cout << N1 << " is " << K1
<< "-HyperPerfect" << "\n" ;
else
cout << N1 << " is not " << K1
<< "-HyperPerfect" << "\n" ;
if (isHyperPerfect(N2, K2))
cout << N2 << " is " << K2
<< "-HyperPerfect" << "\n" ;
else
cout << N2 << " is not " << K2
<< "-HyperPerfect" << "\n" ;
return 0;
} |
// Java program to check // whether a given number // is k-hyperperfect import java.io.*;
class GFG
{ // function to find the // sum of all proper // divisors (excluding // 1 and N) static int divisorSum( int N,
int K)
{ int sum = 0 ;
// Iterate only until
// sqrt N as we are
// going to generate
// pairs to produce
// divisors
for ( int i = 2 ;
i <= Math.ceil(Math.sqrt(N));
i++)
// As divisors occur in
// pairs, we can take
// the values i and N/i
// as long as i divides N
if (N % i == 0 )
sum += (i + N / i);
return sum;
} // Function to check // whether the given // number is prime static boolean isPrime( int n)
{ // base and corner cases
if (n == 1 || n == 0 )
return false ;
if (n <= 3 )
return true ;
// Since integers can be
// represented as some
// 6*k + y where y >= 0,
// we can eliminate all
// integers that can be
// expressed in this form
if (n % 2 == 0 ||
n % 3 == 0 )
return false ;
// start from 5 as this
// is the next prime number
for ( int i = 5 ;
i * i <= n; i = i + 6 )
if (n % i == 0 ||
n % ( i + 2 ) == 0 )
return false ;
return true ;
} // Returns true if N is // a K-Hyperperfect number // Else returns false. static boolean isHyperPerfect( int N,
int K)
{ int sum = divisorSum(N, K);
// Condition from the
// definition of hyperperfect
if (( 1 + K * (sum)) == N)
return true ;
else
return false ;
} // Driver Code public static void main (String[] args)
{ int N1 = 1570153 , K1 = 12 ;
int N2 = 321 , K2 = 3 ;
// First two statements test
// against the condition
// N = 1 + K*(sum(proper divisors))
if (isHyperPerfect(N1, K1))
System.out.println (N1 + " is " + K1 +
"-HyperPerfect" );
else
System.out.println(N1 + " is not " + K1 +
"-HyperPerfect" );
if (isHyperPerfect(N2, K2))
System.out.println( N2 + " is " + K2 +
"-HyperPerfect" );
else
System.out.println(N2 + " is not " + K2 +
"-HyperPerfect" );
} } // This code is contributed by ajit |
# Python3 program to check whether a # given number is k-hyperperfect import math
# Function to find the sum of all # proper divisors (excluding 1 and N) def divisorSum(N, K):
Sum = 0
# Iterate only until sqrt N as we are
# going to generate pairs to produce
# divisors
for i in range ( 2 , math.ceil(math.sqrt(N))):
# As divisors occur in pairs, we can
# take the values i and N/i as long
# as i divides N
if (N % i = = 0 ):
Sum + = (i + int (N / i))
return Sum
# Function to check whether the given # number is prime def isPrime(n):
# Base and corner cases
if (n = = 1 or n = = 0 ):
return False
if (n < = 3 ):
return True
# Since integers can be represented as
# some 6*k + y where y >= 0, we can eliminate
# all integers that can be expressed in this
# form
if (n % 2 = = 0 or n % 3 = = 0 ):
return False
# Start from 5 as this is the next
# prime number
i = 5
while (i * i < = n):
if (n % i = = 0 or n % (i + 2 ) = = 0 ):
return False
i + = 6
return True
# Returns true if N is a K-Hyperperfect # number. Else returns false. def isHyperPerfect(N, K):
Sum = divisorSum(N, K)
# Condition from the definition
# of hyperperfect
if (( 1 + K * ( Sum )) = = N):
return True
else :
return False
# Driver code N1 = 1570153
K1 = 12
N2 = 321
K2 = 3
# First two statements test against the condition # N = 1 + K*(sum(proper divisors)) if (isHyperPerfect(N1, K1)):
print (N1, " is " , K1,
"-HyperPerfect" , sep = "")
else :
print (N1, " is not " , K1,
"-HyperPerfect" , sep = "")
if (isHyperPerfect(N2, K2)):
print (N2, " is " , K2,
"-HyperPerfect" , sep = "")
else :
print (N2, " is not " , K2,
"-HyperPerfect" , sep = "")
# This code is contributed by avanitrachhadiya2155 |
// C# program to check // whether a given number // is k-hyperperfect using System;
class GFG
{ // function to find the // sum of all proper // divisors (excluding // 1 and N) static int divisorSum( int N,
int K)
{ int sum = 0;
// Iterate only until
// sqrt N as we are
// going to generate
// pairs to produce
// divisors
for ( int i = 2 ;
i <= Math.Ceiling(Math.Sqrt(N));
i++)
// As divisors occur in
// pairs, we can take
// the values i and N/i
// as long as i divides N
if (N % i == 0)
sum += (i + N / i);
return sum;
} // Function to check // whether the given // number is prime static bool isPrime( int n)
{ // base and corner cases
if (n == 1 || n == 0)
return false ;
if (n <= 3)
return true ;
// Since integers can be
// represented as some
// 6*k + y where y >= 0,
// we can eliminate all
// integers that can be
// expressed in this form
if (n % 2 == 0 ||
n % 3 == 0)
return false ;
// start from 5 as this
// is the next prime number
for ( int i = 5;
i * i <= n; i = i + 6)
if (n % i == 0 ||
n % ( i + 2 ) == 0)
return false ;
return true ;
} // Returns true if N is // a K-Hyperperfect number // Else returns false. static bool isHyperPerfect( int N,
int K)
{ int sum = divisorSum(N, K);
// Condition from the
// definition of hyperperfect
if ((1 + K * (sum)) == N)
return true ;
else
return false ;
} // Driver Code static public void Main ()
{ int N1 = 1570153, K1 = 12;
int N2 = 321, K2 = 3;
// First two statements // test against the // condition N = 1 + K* // (sum(proper divisors)) if (isHyperPerfect(N1, K1))
Console.WriteLine(N1 + " is " + K1 +
"-HyperPerfect" );
else Console.WriteLine(N1 + " is not " + K1 +
"-HyperPerfect" );
if (isHyperPerfect(N2, K2))
Console.WriteLine( N2 + " is " + K2 +
"-HyperPerfect" );
else Console.WriteLine(N2 + " is not " + K2 +
"-HyperPerfect" );
} } // This code is contributed // by akt_mit |
<?php // PHP 4.3.2 program to check // whether a given number is // k-hyperperfect // function to find the sum // of all proper divisors // (excluding 1 and N) function divisorSum( $N , $K )
{ $sum = 0;
// Iterate only until
// sqrt N as we are
// going to generate
// pairs to produce
// divisors
for ( $i = 2 ;
$i <= ceil (sqrt( $N )) ; $i ++)
// As divisors occur in
// pairs, we can take the
// values i and N/i as long
// as i divides N
if ( $N % $i == 0)
$sum += ( $i + $N / $i );
return $sum ;
} // Function to check whether // the given number is prime function isPrime( $n )
{ // base and corner cases
if ( $n == 1 || $n == 0)
return false;
if ( $n <= 3)
return true;
// Since integers can be
// represented as some 6*k + y
// where y >= 0, we can
// eliminate all integers that
// can be expressed in this form
if ( $n % 2 == 0 || $n % 3 == 0)
return false;
// start from 5 as this
// is the next prime number
for ( $i = 5;
$i * $i <= $n ; $i = $i + 6)
if ( $n % $i == 0 ||
$n % ( $i + 2) == 0)
return false;
return true;
} // Returns true if N is a // K-Hyperperfect number // Else returns false. function isHyperPerfect( $N , $K )
{ $sum = divisorSum( $N , $K );
// Condition from the
// definition of hyperperfect
if ((1 + $K * ( $sum )) == $N )
return true;
else
return false;
} // Driver Code $N1 = 1570153;
$K1 = 12;
$N2 = 321;
$K2 = 3;
// First two statements test // against the condition // N = 1 + K*(sum(proper divisors)) if (isHyperPerfect( $N1 , $K1 ))
echo $N1 , " is " , $K1 ,
"-HyperPerfect" , "\n" ;
else echo $N1 , " is not " , $K1 ,
"-HyperPerfect" , "\n" ;
if (isHyperPerfect( $N2 , $K2 ))
echo $N2 , " is " , K2,
"-HyperPerfect" , "\n" ;
else echo $N2 , " is not " , $K2 ,
"-HyperPerfect" , "\n" ;
// This code is contributed // by akt_mit ?> |
<script> // Javascript program to check // whether a given number // is k-hyperperfect // Function to find the // sum of all proper // divisors (excluding // 1 and N) function divisorSum(N, K)
{ let sum = 0;
// Iterate only until sqrt N as
// we are going to generate
// pairs to produce divisors
for (let i = 2;
i <= Math.ceil(Math.sqrt(N));
i++)
// As divisors occur in
// pairs, we can take
// the values i and N/i
// as long as i divides N
if (N % i == 0)
sum += (i + parseInt(N / i, 10));
return sum;
} // Function to check // whether the given // number is prime function isPrime(n)
{ // base and corner cases
if (n == 1 || n == 0)
return false ;
if (n <= 3)
return true ;
// Since integers can be
// represented as some
// 6*k + y where y >= 0,
// we can eliminate all
// integers that can be
// expressed in this form
if (n % 2 == 0 || n % 3 == 0)
return false ;
// Start from 5 as this
// is the next prime number
for (let i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return false ;
return true ;
} // Returns true if N is // a K-Hyperperfect number // Else returns false. function isHyperPerfect(N, K)
{ let sum = divisorSum(N, K);
// Condition from the
// definition of hyperperfect
if ((1 + K * (sum)) == N)
return true ;
else
return false ;
} // Driver code let N1 = 1570153, K1 = 12; let N2 = 321, K2 = 3; // First two statements // test against the // condition N = 1 + K* // (sum(proper divisors)) if (isHyperPerfect(N1, K1))
document.write(N1 + " is " + K1 +
"-HyperPerfect" + "</br>" );
else document.write(N1 + " is not " + K1 +
"-HyperPerfect" + "</br>" );
if (isHyperPerfect(N2, K2))
document.write(N2 + " is " + K2 +
"-HyperPerfect" + "</br>" );
else document.write(N2 + " is not " + K2 +
"-HyperPerfect" + "</br>" );
// This code is contributed by decode2207 </script> |
Output:
1570153 is 12-HyperPerfect 321 is not 3-HyperPerfect
Time Complexity: O(?n)
Auxiliary Space: O(1)
Given k, we can perform a few checks in special cases to determine whether the number is hyperperfect:
- If K > 1 and K is odd , then let p = (3*k+1)/2 and q = 3*k+4 . If p and q are prime, then p2q is k-hyperperfect
- If p and q are distinct odd primes such that K(p + q ) = pq – 1 for some positive integral value of K, then pq is k-hyperperfect
Reference :
https://en.wikipedia.org/wiki/Hyperperfect_number