Check if sum of divisors of two numbers are same
Last Updated :
06 Apr, 2023
Given two numbers n1 & n2, We need to check whether these numbers are equivalent numbers or not.
Equivalent numbers are numbers such that the sums of their proper divisors are the same.
For example, 159, 559, and 703 are equivalent numbers. This is because all three numbers have 57 as the sum of their proper divisors.
Examples :
Input : n1 = 559, n2 = 703
Output : Yes.
Explanation: Both numbers have 57 as a sum of their proper divisors.
Input : n1 = 36, n2 = 57
Output : No.
Explanation: 36 has sum 55 while 57 has sum 23 of their proper divisors.
Find the sum of proper divisors as implemented in for Perfect number for the given numbers and then will check if both sums are equal or not.
C++
#include <bits/stdc++.h>
using namespace std;
int divSum( int n)
{
long long int sum = 1;
for ( long long int i = 2; i * i <= n; i++)
if (n % i == 0)
sum = sum + i + n / i;
return sum;
}
bool areEquivalent( int num1, int num2)
{
return divSum(num1) == divSum(num2);
}
int main()
{
int num1 = 559, num2 = 703;
areEquivalent(num1, num2) ?
cout << "Equivalent" :
cout << "Not Equivalent" ;
return 0;
}
|
Java
import java.math.*;
class GFG {
static int divSum( int n)
{
int sum = 1 ;
for ( int i = 2 ; i * i <= n; i++)
if (n % i == 0 )
sum = sum + i + n / i;
return sum;
}
static boolean areEquivalent( int num1, int num2)
{
return divSum(num1) == divSum(num2);
}
public static void main(String[] args)
{
int num1 = 559 ;
int num2 = 703 ;
if (areEquivalent(num1, num2))
System.out.println( "Equivalent" );
else
System.out.println( "Not Equivalent" );
}
}
|
Python3
import math
def divSum(n):
sum = 1 ;
i = 2 ;
while (i * i < = n):
if (n % i = = 0 ):
sum = ( sum + i +
math.floor(n / i));
i + = 1 ;
return sum ;
def areEquivalent(num1, num2):
return divSum(num1) = = divSum(num2);
num1 = 559 ;
num2 = 703 ;
if (areEquivalent(num1, num2) = = True ):
print ( "Equivalent" );
else :
print ( "Not Equivalent" );
|
C#
using System;
class GFG
{
static int divSum( int n)
{
int sum = 1;
for ( int i = 2; i * i <= n; i++)
if (n % i == 0)
sum = sum + i + n / i;
return sum;
}
static bool areEquivalent( int num1,
int num2)
{
return divSum(num1) == divSum(num2);
}
static public void Main ()
{
int num1 = 559;
int num2 = 703;
if (areEquivalent(num1, num2))
Console.WriteLine( "Equivalent" );
else
Console.WriteLine( "Not Equivalent" );
}
}
|
PHP
<?php
function divSum( $n )
{
$sum = 1;
for ( $i = 2; $i * $i <= $n ; $i ++)
if ( $n % $i == 0)
$sum = $sum + $i +
floor ( $n / $i );
return $sum ;
}
function areEquivalent( $num1 , $num2 )
{
return divSum( $num1 ) == divSum( $num2 );
}
$num1 = 559; $num2 = 703;
if (areEquivalent( $num1 , $num2 ) == true)
echo "Equivalent" ;
else
echo "Not Equivalent" ;
?>
|
Javascript
<script>
function divSum(n)
{
let sum = 1;
for (let i = 2; i * i <= n; i++)
if (n % i == 0)
sum = sum + i + parseInt(n / i, 10);
return sum;
}
function areEquivalent(num1, num2)
{
return divSum(num1) == divSum(num2);
}
let num1 = 559;
let num2 = 703;
if (areEquivalent(num1, num2))
document.write( "Equivalent" );
else
document.write( "Not Equivalent" );
</script>
|
Time complexity : O(sqrt(n)).
Auxiliary space complexity : O(1).
Share your thoughts in the comments
Please Login to comment...