Find the sum of all Betrothed numbers up to N
Last Updated :
09 Aug, 2022
Given a number N, the task is to find the sum of the all Betrothed numbers up to N.
Let, A and B are a Betrothed number pair, then the sum of the proper divisors of A is equal to B+1 and the sum of the proper divisors of B is equal to A+1.
Examples:
Input: 78
Output: 123
Explanation: 48 and 75 is the only pair of Betrothed Numbers upto 78.
Input: 5
Output: 0
Explanation: There is no pair of Betrothed Numbers up to 50.
Approach:
- Initialise the array to store all Betrothed numbers upto to N
- Find the Betrothed numbers using sum of all its proper divisors and store the pair in the array.
- Then find the sum all the numbers less than and equal to N.
- The resultant sum is the required value.
Below code is the implementation of the above approach:
C++
#include<bits/stdc++.h>
using namespace std;
int Betrothed_Sum( int n)
{
vector< int > Set;
for ( int number_1 = 1; number_1 < n;
number_1++)
{
int sum_divisor_1 = 1;
int i = 2;
while (i * i <= number_1)
{
if (number_1 % i == 0)
{
sum_divisor_1 = sum_divisor_1 + i;
if (i * i != number_1)
sum_divisor_1 += number_1 / i;
}
i ++;
}
if (sum_divisor_1 > number_1)
{
int number_2 = sum_divisor_1 - 1;
int sum_divisor_2 = 1;
int j = 2;
while (j * j <= number_2)
{
if (number_2 % j == 0)
{
sum_divisor_2 += j;
if (j * j != number_2)
sum_divisor_2 += number_2 / j;
}
j = j + 1;
}
if (sum_divisor_2 == number_1 + 1 and
number_1 <= n && number_2 <= n)
{
Set.push_back(number_1);
Set.push_back(number_2);
}
}
}
int Summ = 0;
for ( auto i : Set)
{
if (i <= n)
Summ += i;
}
return Summ;
}
int main()
{
int n = 78;
cout << Betrothed_Sum(n);
return 0;
}
|
Java
import java.util.*;
class GFG{
public static int Betrothed_Sum( int n)
{
Vector<Integer> Set = new Vector<Integer>();
for ( int number_1 = 1 ;
number_1 < n;
number_1++)
{
int sum_divisor_1 = 1 ;
int i = 2 ;
while (i * i <= number_1)
{
if (number_1 % i == 0 )
{
sum_divisor_1 = sum_divisor_1 + i;
if (i * i != number_1)
sum_divisor_1 += number_1 / i;
}
i ++;
}
if (sum_divisor_1 > number_1)
{
int number_2 = sum_divisor_1 - 1 ;
int sum_divisor_2 = 1 ;
int j = 2 ;
while (j * j <= number_2)
{
if (number_2 % j == 0 )
{
sum_divisor_2 += j;
if (j * j != number_2)
sum_divisor_2 += number_2 / j;
}
j = j + 1 ;
}
if (sum_divisor_2 == number_1 + 1 &&
number_1 <= n && number_2 <= n)
{
Set.add(number_1);
Set.add(number_2);
}
}
}
int Summ = 0 ;
for ( int i = 0 ; i < Set.size(); i++)
{
if (Set.get(i) <= n)
Summ += Set.get(i);
}
return Summ;
}
public static void main(String[] args)
{
int n = 78 ;
System.out.println(Betrothed_Sum(n));
}
}
|
Python3
import math
def Betrothed_Sum(n):
Set = []
for number_1 in range ( 1 , n):
sum_divisor_1 = 1
i = 2
while i * i < = number_1:
if (number_1 % i = = 0 ):
sum_divisor_1 = sum_divisor_1 + i
if (i * i ! = number_1):
sum_divisor_1 + = number_1 / / i
i = i + 1
if (sum_divisor_1 > number_1):
number_2 = sum_divisor_1 - 1
sum_divisor_2 = 1
j = 2
while j * j < = number_2:
if (number_2 % j = = 0 ):
sum_divisor_2 + = j
if (j * j ! = number_2):
sum_divisor_2 + = number_2 / / j
j = j + 1
if (sum_divisor_2 = = number_1 + 1
and number_1< = n and number_2< = n):
Set .append(number_1)
Set .append(number_2)
Summ = 0
for i in Set :
if i < = n:
Summ + = i
return Summ
n = 78
print (Betrothed_Sum(n))
|
C#
using System;
using System.Collections;
class GFG{
public static int Betrothed_Sum( int n)
{
ArrayList set = new ArrayList();
for ( int number_1 = 1;
number_1 < n;
number_1++)
{
int sum_divisor_1 = 1;
int i = 2;
while (i * i <= number_1)
{
if (number_1 % i == 0)
{
sum_divisor_1 = sum_divisor_1 + i;
if (i * i != number_1)
sum_divisor_1 += number_1 / i;
}
i ++;
}
if (sum_divisor_1 > number_1)
{
int number_2 = sum_divisor_1 - 1;
int sum_divisor_2 = 1;
int j = 2;
while (j * j <= number_2)
{
if (number_2 % j == 0)
{
sum_divisor_2 += j;
if (j * j != number_2)
sum_divisor_2 += number_2 / j;
}
j = j + 1;
}
if (sum_divisor_2 == number_1 + 1 &&
number_1 <= n && number_2 <= n)
{
set .Add(number_1);
set .Add(number_2);
}
}
}
int Summ = 0;
for ( int i = 0; i < set .Count; i++)
{
if (( int ) set [i] <= n)
Summ += ( int ) set [i];
}
return Summ;
}
static public void Main()
{
int n = 78;
Console.WriteLine(Betrothed_Sum(n));
}
}
|
Javascript
<script>
function Betrothed_Sum(n)
{
let Set = [];
for (let number_1 = 1; number_1 < n;
number_1++)
{
let sum_divisor_1 = 1;
let i = 2;
while (i * i <= number_1)
{
if (number_1 % i == 0)
{
sum_divisor_1 = sum_divisor_1 + i;
if (i * i != number_1)
sum_divisor_1 += parseInt(number_1 / i);
}
i++;
}
if (sum_divisor_1 > number_1)
{
let number_2 = sum_divisor_1 - 1;
let sum_divisor_2 = 1;
let j = 2;
while (j * j <= number_2)
{
if (number_2 % j == 0)
{
sum_divisor_2 += j;
if (j * j != number_2)
sum_divisor_2 += parseInt(number_2 / j);
}
j = j + 1;
}
if ((sum_divisor_2 == number_1 + 1) &&
number_1 <= n && number_2 <= n)
{
Set.push(number_1);
Set.push(number_2);
}
}
}
let Summ = 0;
for (let i = 0; i < Set.length; i++)
{
if (Set[i] <= n)
Summ += Set[i];
}
return Summ;
}
let n = 78;
document.write(Betrothed_Sum(n));
</script>
|
Time Complexity: O(N * sqrt(N))
Auxiliary Space: O(n)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...