Given a number N. FInd the sum of he all amicable numbers up to N. If A and B are Amicable pairs (Two numbers are amicable if the first is equal to the sum of divisors of the second) then A and B are called as Amicable numbers.
Examples:
Input : 284
Output : 504
Explanation : 220 and 284 are two amicable numbers upto 284
Input : 250
Output : 220
Explanation : 220 is the only amicable number
Approach :
An efficient approach is to store all amicable numbers in a set and for a given N sum all the numbers in the set which are less than equals to N.
Below code is the implementation of the above approach:
C++
// CPP program to find sum of all// amicable numbers up to n#include <bits/stdc++.h>using namespace std;#define N 100005// Function to return all amicable numbersset<int> AMICABLE(){ int sum[N]; memset(sum, 0, sizeof sum); for (int i = 1; i < N; i++) { // include 1 sum[i]++; for (int j = 2; j * j <= i; j++) { // j is proper divisor of i if (i % j == 0) { sum[i] += j; // if i is not a perfect square if (i / j != j) sum[i] += i / j; } } } set<int> s; for (int i = 2; i < N; i++) { // insert amicable numbers if (i != sum[i] and sum[i] < N and i == sum[sum[i]] and !s.count(i) and !s.count(sum[i])) { s.insert(i); s.insert(sum[i]); } } return s;}// function to find sum of all// amicable numbers up to Nint SumOfAmicable(int n){ // to store required sum int sum = 0; // to store all amicable numbers set<int> s = AMICABLE(); // sum all amicable numbers upto N for (auto i = s.begin(); i != s.end(); ++i) { if (*i <= n) sum += *i; else break; } // required answer return sum;}// Driver code to test above functionsint main(){ int n = 284; cout << SumOfAmicable(n); return 0;} |
Java
// Java program to find sum of all// amicable numbers up to nimport java.util.*;class GFG{ static final int N=100005;// Function to return all amicable numbersstatic Set<Integer> AMICABLE(){ int sum[] = new int[N]; for(int i = 0; i < N; i++) sum[i]=0; for (int i = 1; i < N; i++) { // include 1 sum[i]++; for (int j = 2; j * j <= i; j++) { // j is proper divisor of i if (i % j == 0) { sum[i] += j; // if i is not a perfect square if (i / j != j) sum[i] += i / j; } } } Set<Integer> s = new HashSet<Integer>(); for (int i = 2; i < N; i++) { // insert amicable numbers if (i != sum[i] && sum[i] < N && i == sum[sum[i]]) { s.add(i); s.add(sum[i]); } } return s;}// function to find sum of all// amicable numbers up to Nstatic int SumOfAmicable(int n){ // to store required sum int sum = 0; // to store all amicable numbers Set<Integer> s = AMICABLE(); // sum all amicable numbers upto N for (Integer x : s) { if (x <= n) sum += x; } // required answer return sum;}// Driver code public static void main(String args[]){ int n = 284; System.out.println( SumOfAmicable(n));}}// This code is contributed by Arnab Kundu |
Python3
# Python3 program to findSum of all# amicable numbers up to nimport math as mtN = 100005# Function to return all amicable numbersdef AMICABLE(): Sum = [0 for i in range(N)] for i in range(1, N): Sum[i] += 1 for j in range(2, mt.ceil(mt.sqrt(i))): # j is proper divisor of i if (i % j == 0): Sum[i] += j # if i is not a perfect square if (i // j != j): Sum[i] += i // j s = set() for i in range(2, N): if(i != Sum[i] and Sum[i] < N and i == Sum[Sum[i]] and i not in s and Sum[i] not in s): s.add(i) s.add(Sum[i]) return s# function to findSum of all amicable # numbers up to Ndef SumOfAmicable(n): # to store requiredSum Sum = 0 # to store all amicable numbers s = AMICABLE() #Sum all amicable numbers upto N s = sorted(s) for i in s: if (i <= n): Sum += i else: break # required answer return Sum# Driver Coden = 284print(SumOfAmicable(n))# This code is contributed by # mohit kumar 29 |
C#
// C# program to find sum of all// amicable numbers up to nusing System;using System.Collections.Generic;class GFG{ static readonly int N = 100005;// Function to return all amicable numbersstatic HashSet<int> AMICABLE(){ int []sum = new int[N]; for(int i = 0; i < N; i++) sum[i] = 0; for (int i = 1; i < N; i++) { // include 1 sum[i]++; for (int j = 2; j * j <= i; j++) { // j is proper divisor of i if (i % j == 0) { sum[i] += j; // if i is not a perfect square if (i / j != j) sum[i] += i / j; } } } HashSet<int> s = new HashSet<int>(); for (int i = 2; i < N; i++) { // insert amicable numbers if (i != sum[i] && sum[i] < N && i == sum[sum[i]]) { s.Add(i); s.Add(sum[i]); } } return s;}// function to find sum of all// amicable numbers up to Nstatic int SumOfAmicable(int n){ // to store required sum int sum = 0; // to store all amicable numbers HashSet<int> s = AMICABLE(); // sum all amicable numbers upto N foreach (int x in s) { if (x <= n) sum += x; } // required answer return sum;}// Driver code public static void Main(){ int n = 284; Console.WriteLine( SumOfAmicable(n));}}/* This code contributed by PrinciRaj1992 */ |
PHP
<?php// PHP program to find sum of all// amicable numbers up to n$N = 10005;// Function to return all amicable// numbersfunction AMICABLE(){ global $N; $sum = array_fill(0, $N, 0); for ($i = 1; $i < $N; $i++) { // include 1 $sum[$i]++; for ($j = 2; $j * $j <= $i; $j++) { // j is proper divisor of i if ($i % $j == 0) { $sum[$i] += $j; // if i is not a perfect square if ($i / $j != $j) $sum[$i] += $i / $j; } } } $s = array(); for ($i = 2; $i < $N; $i++) { // insert amicable numbers if ($i != $sum[$i] and $sum[$i] < $N and $i == $sum[$sum[$i]] and !in_array($i, $s) and !in_array($sum[$i], $s)) { array_push($s, $i); array_push($s, $sum[$i]); } } return $s;}// function to find sum of all// amicable numbers up to Nfunction SumOfAmicable($n){ // to store required sum $sum = 0; // to store all amicable numbers $s = AMICABLE(); $s = array_unique($s); sort($s); // sum all amicable numbers upto N for ($i = 0; $i != count($s); ++$i) { if ($s[$i] <= $n) $sum += $s[$i]; else break; } // required answer return $sum;}// Driver code$n = 284;echo SumOfAmicable($n);// This code is contributed by mits?> |
Javascript
<script>// JavaScript program to find sum of all// amicable numbers up to nlet N=100005;// Function to return all amicable numbersfunction AMICABLE(){ let sum = new Array(N); for(let i = 0; i < N; i++) sum[i]=0; for (let i = 1; i < N; i++) { // include 1 sum[i]++; for (let j = 2; j * j <= i; j++) { // j is proper divisor of i if (i % j == 0) { sum[i] += j; // if i is not a perfect square if (i / j != j) sum[i] += i / j; } } } let s = new Set(); for (let i = 2; i < N; i++) { // insert amicable numbers if (i != sum[i] && sum[i] < N && i == sum[sum[i]]) { s.add(i); s.add(sum[i]); } } return s;}// function to find sum of all// amicable numbers up to Nfunction SumOfAmicable(n){ // to store required sum let sum = 0; // to store all amicable numbers let s = AMICABLE(); // sum all amicable numbers upto N for (let x of s.values()) { if (x <= n) sum += x; } // required answer return sum;}// Driver code let n = 284;document.write( SumOfAmicable(n));// This code is contributed by unknown2108</script> |
504
Time Complexity: O(n2)
Auxiliary Space: O(100005)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

… [Trackback]
[…] Read More on that Topic: geeksforgeeks.org/find-the-sum-of-the-all-amicable-numbers-up-to-n/ […]
… [Trackback]
[…] Read More Information here on that Topic: geeksforgeeks.org/find-the-sum-of-the-all-amicable-numbers-up-to-n/ […]