Given a number N, the task is to check if N is an Anti-perfectNumber or not. If N is an Anti-perfectNumber then print “Yes” else print “No”.
An anti-perfect Number is a number that is equal to the sum of the reverse of its proper divisors.
Examples:
Input: N = 244
Output: Yes
Explanation:
proper divisors of 24 are 1, 2, 4, 61, 122
sum of their reverse is 1 + 2 + 4 + 16 + 221 = 244 = N.
Input: N = 28
Output: No
Approach The idea is to find the sum of the reverse of the proper divisors of the number N and check if the sum if equals to N or not. If sum is equals to N, then N is an Anti-perfectNumber then print “Yes” else print “No”.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int rev( int num)
{
int rev_num = 0;
while (num > 0) {
rev_num = rev_num * 10
+ num % 10;
num = num / 10;
}
return rev_num;
}
int divSum( int num)
{
int result = 0;
for ( int i = 2; i <= sqrt (num); i++) {
if (num % i == 0) {
if (i == (num / i))
result += rev(i);
else
result += (rev(i)
+ rev(num / i));
}
}
return (result + 1);
}
bool isAntiPerfect( int n)
{
return divSum(n) == n;
}
int main()
{
int N = 244;
if (isAntiPerfect(N))
cout << "Yes" ;
else
cout << "No" ;
return 0;
}
|
Java
class GFG{
static int rev( int num)
{
int rev_num = 0 ;
while (num > 0 )
{
rev_num = rev_num * 10 +
num % 10 ;
num = num / 10 ;
}
return rev_num;
}
static int divSum( int num)
{
int result = 0 ;
for ( int i = 2 ; i <= Math.sqrt(num); i++)
{
if (num % i == 0 )
{
if (i == (num / i))
result += rev(i);
else
result += (rev(i) +
rev(num / i));
}
}
return (result + 1 );
}
static boolean isAntiPerfect( int n)
{
return divSum(n) == n;
}
public static void main (String[] args)
{
int N = 244 ;
if (isAntiPerfect(N))
System.out.print( "Yes" );
else
System.out.print( "No" );
}
}
|
Python3
def rev(num):
rev_num = 0
while (num > 0 ) :
rev_num = rev_num * 10 + num % 10
num = num / / 10
return rev_num
def divSum(num) :
result = 0
for i in range ( 2 , int (num * * 0.5 )):
if (num % i = = 0 ) :
if (i = = (num / i)):
result + = rev(i)
else :
result + = (rev(i) + rev(num / i))
return (result + 1 )
def isAntiPerfect(n):
return divSum(n) = = n
N = 244
if (isAntiPerfect(N)):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
class GFG{
static int rev( int num)
{
int rev_num = 0;
while (num > 0)
{
rev_num = rev_num * 10 +
num % 10;
num = num / 10;
}
return rev_num;
}
static int divSum( int num)
{
int result = 0;
for ( int i = 2; i <= Math.Sqrt(num); i++)
{
if (num % i == 0)
{
if (i == (num / i))
result += rev(i);
else
result += (rev(i) +
rev(num / i));
}
}
return (result + 1);
}
static Boolean isAntiPerfect( int n)
{
return divSum(n) == n;
}
public static void Main (String[] args)
{
int N = 244;
if (isAntiPerfect(N))
Console.Write( "Yes" );
else
Console.Write( "No" );
}
}
|
Javascript
<script>
function rev(num)
{
var rev_num = 0;
while (num > 0) {
rev_num = rev_num * 10 + num % 10;
num = Math.floor(num / 10);
}
return rev_num;
}
function divSum(num)
{
var result = 0;
for ( var i = 2; i <= Math.floor(Math.sqrt(num)); i++) {
if (num % i == 0) {
if (i == (num / i))
result += rev(i);
else
result += (rev(i)
+ rev(num / i));
}
}
result += 1;
return result;
}
function isAntiPerfect(n)
{
return divSum(n) == n;
}
var N = 244;
if (isAntiPerfect(N))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Time Complexity: O(sqrt(N))
Last Updated :
25 May, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...