Almost Perfect Number
Last Updated :
25 Feb, 2024
Given a number n, check it is the Almost Perfect number or not. Almost perfect number is a natural number whose sum of all divisors including 1 and the number itself is equal to 2n – 1.
Example :
Input: n = 16
Output: Yes
Explanation: sum of divisors = 1 + 2 + 4 + 8 + 16 = 31 = 2n – 1
Input: n = 9
Output: No
Explanation: sum of divisors = 1 + 3 + 9 ? 2n – 1
C++
#include <bits/stdc++.h>
using namespace std;
bool isAlmostperfect( int n)
{
int divisors = 0;
for ( int i = 1; i <= n; i++) {
if (n % i == 0)
divisors += i;
}
if (divisors == 2 * n - 1)
return true ;
return false ;
}
int main()
{
int n = 16;
if (isAlmostperfect(n))
cout << "Yes" ;
else
cout << "No" ;
}
|
Java
class GFG {
static boolean isAlmostperfect( int n)
{
int divisors = 0 ;
for ( int i = 1 ; i <= n; i++)
{
if (n % i == 0 )
divisors += i;
}
if (divisors == 2 * n - 1 )
return true ;
return false ;
}
public static void main(String[] args)
{
int n = 16 ;
if (isAlmostperfect(n))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
}
|
Python3
def isAlmostperfect(n):
divisors = 0
for i in range ( 1 , n + 1 ):
if (n % i = = 0 ):
divisors = divisors + i
if (divisors = = 2 * n - 1 ):
return True
else :
return False
n = 16
if (isAlmostperfect(n)):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
class GFG
{
static bool isAlmostperfect( int n)
{
int divisors = 0;
for ( int i = 1; i <= n; i++)
{
if (n % i == 0)
divisors += i;
}
if (divisors == 2 * n - 1)
return true ;
return false ;
}
static public void Main ()
{
int n = 16;
if (isAlmostperfect(n))
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
}
}
|
Javascript
<script>
function isAlmostperfect( n)
{
let divisors = 0;
for (let i = 1; i <= n; i++) {
if (n % i == 0)
divisors += i;
}
if (divisors == 2 * n - 1)
return true ;
return false ;
}
let n = 16;
if (isAlmostperfect(n))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
PHP
<?php
function isAlmostperfect( $n )
{
$divisors = 0;
for ( $i = 1; $i <= $n ; $i ++)
{
if ( $n % $i == 0)
$divisors += $i ;
}
if ( $divisors == 2 * $n - 1)
return true;
return false;
}
$n = 16;
if (isAlmostperfect( $n ))
echo ( "Yes" );
else
echo ( "No" );
?>
|
The almost perfect numbers are found to be of the form 2^k(k = 0, 1, 2, 3, 4, ..). However it is not proved.
Time Complexity: O(n)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...