📌  相关文章
📜  找出所有友善的数字之和,直到N

📅  最后修改于: 2021-06-26 10:35:33             🧑  作者: Mango

给定一个数字N。找到所有N的可和数字之和。如果A和B是可配对的对(如果第一个等于第二个除数的和,则两个数字是可和的),则将A和B称为亲和的数字。

例子:

方法
一种有效的方法是将所有友好数字存储在一个集合中,并且对于给定的N总和,集合中所有小于等于N的数字。

下面的代码是上述方法的实现:

C++
// CPP program to find sum of all
// amicable numbers up to n
#include 
using namespace std;
  
#define N 100005
  
// Function to return all amicable numbers
set 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 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 N
int SumOfAmicable(int n)
{
    // to store required sum
    int sum = 0;
  
    // to store all amicable numbers
    set 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 functions
int main()
{
    int n = 284;
  
    cout << SumOfAmicable(n);
  
    return 0;
}


Java
// Java program to find sum of all
// amicable numbers up to n
import java.util.*;
class GFG
{
      
static final int N=100005;
  
// Function to return all amicable numbers
static Set 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 s = new HashSet();
    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 N
static int SumOfAmicable(int n)
{
    // to store required sum
    int sum = 0;
  
    // to store all amicable numbers
    Set 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 n
import math as mt
  
N = 100005
  
# Function to return all amicable numbers
def 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 N
def 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 Code
n = 284
print(SumOfAmicable(n))
  
# This code is contributed by 
# mohit kumar 29


C#
// C# program to find sum of all
// amicable numbers up to n
using System;
using System.Collections.Generic;
  
class GFG
{
      
static readonly int N = 100005;
  
// Function to return all amicable numbers
static HashSet 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 s = new HashSet();
    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 N
static int SumOfAmicable(int n)
{
    // to store required sum
    int sum = 0;
  
    // to store all amicable numbers
    HashSet 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


输出:
504

如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。