📜  检查给定的两个数字是否为友好对

📅  最后修改于: 2021-04-24 18:21:07             🧑  作者: Mango

给定两个正整数NM 。任务是检查N和M是否为友好对。

例子:

Input : n = 6, m = 28
Output : Yes
Explanation:
Divisor of 6 are 1, 2, 3, 6.
Divisor of 28 are 1, 2, 4, 7, 14, 28.
Sum of divisor of 6 and 28 are 12 and 56
respectively. Abundancy index of 6 and 28 
are 2. So they are friendly pair.

Input : n = 18, m = 26
Output : No

这个想法是找到n和m的除数之和。并检查n和m的丰度指数,我们将找到n和m的最大公约数及其除数之和。并通过检查其分子和分母是否相等来检查n和m的丰度指数的缩减形式是否相等。为了找到简化形式,我们将分子和分母除以GCD。
下面是上述想法的实现:

C++
// Check if the given two number
// are friendly pair or not.
#include 
using namespace std;
 
// Returns sum of all factors of n.
int sumofFactors(int n)
{
 
    // Traversing through all prime factors.
    int res = 1;
    for (int i = 2; i <= sqrt(n); i++) {
 
        int count = 0, curr_sum = 1;
        int curr_term = 1;
        while (n % i == 0) {
            count++;
 
            // THE BELOW STATEMENT MAKES
            // IT BETTER THAN ABOVE METHOD
            // AS WE REDUCE VALUE OF n.
            n = n / i;
 
            curr_term *= i;
            curr_sum += curr_term;
        }
 
        res *= curr_sum;
    }
 
    // This condition is to handle
    // the case when n is a prime
    // number greater than 2.
    if (n >= 2)
        res *= (1 + n);
 
    return res;
}
 
// Function to return gcd of a and b
int gcd(int a, int b)
{
    if (a == 0)
        return b;
    return gcd(b % a, a);
}
 
// Function to check if the given two
// number are friendly pair or not.
bool checkFriendly(int n, int m)
{
    // Finding the sum of factors of n and m
    int sumFactors_n = sumofFactors(n);
    int sumFactors_m = sumofFactors(m);
 
    // finding gcd of n and sum of its factors.
    int gcd_n = gcd(n, sumFactors_n);
 
    // findig gcd of m and sum of its factors.
    int gcd_m = gcd(m, sumFactors_m);
 
    // checking is numerator and denominator of
    // abundancy index of both number are equal
    // or not.
    if (n / gcd_n == m / gcd_m &&
        sumFactors_n / gcd_n == sumFactors_m / gcd_m)
        return true;
 
    else
        return false;
}
 
// Driver code
int main()
{
    int n = 6, m = 28;
    checkFriendly(n, m) ? (cout << "Yes\n") :
                          (cout << "No\n");
    return 0;
}


Java
// Java code to check if the given two number
// are friendly pair or not.
class GFG {
     
    // Returns sum of all factors of n.
    static int sumofFactors(int n)
    {
     
        // Traversing through all prime factors.
        int res = 1;
        for (int i = 2; i <= Math.sqrt(n); i++) {
     
            int count = 0, curr_sum = 1;
            int curr_term = 1;
            while (n % i == 0) {
                count++;
     
                // THE BELOW STATEMENT MAKES
                // IT BETTER THAN ABOVE METHOD
                // AS WE REDUCE VALUE OF n.
                n = n / i;
     
                curr_term *= i;
                curr_sum += curr_term;
            }
     
            res *= curr_sum;
        }
     
        // This condition is to handle
        // the case when n is a prime
        // number greater than 2.
        if (n >= 2)
            res *= (1 + n);
     
        return res;
    }
     
    // Function to return gcd of a and b
    static int gcd(int a, int b)
    {
        if (a == 0)
            return b;
             
        return gcd(b % a, a);
    }
     
    // Function to check if the given two
    // number are friendly pair or not.
    static boolean checkFriendly(int n, int m)
    {
        // Finding the sum of factors of n and m
        int sumFactors_n = sumofFactors(n);
        int sumFactors_m = sumofFactors(m);
     
        // finding gcd of n and sum of its factors.
        int gcd_n = gcd(n, sumFactors_n);
     
        // findig gcd of m and sum of its factors.
        int gcd_m = gcd(m, sumFactors_m);
     
        // checking is numerator and denominator of
        // abundancy index of both number are equal
        // or not.
        if (n / gcd_n == m / gcd_m &&
            sumFactors_n / gcd_n == sumFactors_m / gcd_m)
            return true;
     
        else
            return false;
    }
     
    //driver code
    public static void main (String[] args)
    {
        int n = 6, m = 28;
         
        if(checkFriendly(n, m))
            System.out.print("Yes\n");
        else
            System.out.print("No\n");
    }
}
 
// This code is contributed by Anant Agarwal.


Python3
# Check if the given two number
# are friendly pair or not.
import math
 
# Returns sum of all factors of n.
def sumofFactors(n):
 
    # Traversing through all prime factors.
    res = 1
    for i in range(2, int(math.sqrt(n)) + 1):
 
        count = 0; curr_sum = 1; curr_term = 1
        while (n % i == 0):
            count += 1
 
            # THE BELOW STATEMENT MAKES
            # IT BETTER THAN ABOVE METHOD
            # AS WE REDUCE VALUE OF n.
            n = n // i
 
            curr_term *= i
            curr_sum += curr_term
         
        res *= curr_sum
     
    # This condition is to handle
    # the case when n is a prime
    # number greater than 2.
    if (n >= 2):
        res *= (1 + n)
 
    return res
 
# Function to return gcd of a and b
def gcd(a, b):
 
    if (a == 0):
        return b
    return gcd(b % a, a)
 
# Function to check if the given two
# number are friendly pair or not.
def checkFriendly(n, m):
 
    # Finding the sum of factors of n and m
    sumFactors_n = sumofFactors(n)
    sumFactors_m = sumofFactors(m)
 
    # Finding gcd of n and sum of its factors.
    gcd_n = gcd(n, sumFactors_n)
 
    # Findig gcd of m and sum of its factors.
    gcd_m = gcd(m, sumFactors_m)
 
    # checking is numerator and denominator 
    # of abundancy index of both number are
    # equal or not.
    if (n // gcd_n == m // gcd_m and
        sumFactors_n // gcd_n == sumFactors_m // gcd_m):
        return True
 
    else:
        return False
 
# Driver code
n = 6; m = 28
if(checkFriendly(n, m)):
    print("Yes")
else:
    print("No")
     
# This code is contributed by Anant Agarwal.


C#
// C# code to check if the
// given two number are
// friendly  pair or not
using System;
 
class GFG {
     
    // Returns sum of all
    //factors of n.
    static int sumofFactors(int n)
    {
     
        // Traversing through all
        // prime factors.
        int res = 1;
        for (int i = 2; i <= Math.Sqrt(n); i++)
        {
     
            int count = 0, curr_sum = 1;
            int curr_term = 1;
            while (n % i == 0)
            {
                count++;
     
                // THE BELOW STATEMENT MAKES
                // IT BETTER THAN ABOVE METHOD
                // AS WE REDUCE VALUE OF n.
                n = n / i;
     
                curr_term *= i;
                curr_sum += curr_term;
            }
     
            res *= curr_sum;
        }
     
        // This condition is to handle
        // the case when n is a prime
        // number greater than 2.
        if (n >= 2)
            res *= (1 + n);
     
        return res;
    }
     
    // Function to return gcd
    // of a and b
    static int gcd(int a, int b)
    {
        if (a == 0)
            return b;
             
        return gcd(b % a, a);
    }
     
    // Function to check if the
    // given two number are
    // friendly pair or not
    static bool checkFriendly(int n, int m)
    {
        // Finding the sum of factors
        // of n and m
        int sumFactors_n = sumofFactors(n);
        int sumFactors_m = sumofFactors(m);
     
        // finding gcd of n and
        // sum of its factors.
        int gcd_n = gcd(n, sumFactors_n);
     
        // findig gcd of m and sum
        // of its factors.
        int gcd_m = gcd(m, sumFactors_m);
     
        // checking is numerator and
        // denominator of abundancy
        // index of both number are
        // equal or not
        if (n / gcd_n == m / gcd_m &&
            sumFactors_n / gcd_n ==
            sumFactors_m / gcd_m)
            return true;
     
        else
            return false;
    }
     
    // Driver code
    public static void Main (String[] args)
    {
        int n = 6, m = 28;
         
        if(checkFriendly(n, m))
            Console.Write("Yes\n");
        else
            Console.Write("No\n");
    }
}
 
// This code is contributed by parshar...


PHP
= 2)
        $res *= (1 + $n);
 
    return $res;
}
 
// Function to return
// gcd of a and b
function gcd($a, $b)
{
    if ($a == 0)
        return $b;
    return gcd($b % $a, $a);
}
 
// Function to check if the given two
// number are friendly pair or not.
function checkFriendly($n, $m)
{
     
    // Finding the sum of
    // factors of n and m
    $sumFactors_n = sumofFactors($n);
    $sumFactors_m = sumofFactors($m);
 
    // finding gcd of n and
    // sum of its factors.
    $gcd_n = gcd($n, $sumFactors_n);
 
    // findig gcd of m and
    // sum of its factors.
    $gcd_m = gcd($m, $sumFactors_m);
 
    // checking is numerator
    // and denominator of
    // abundancy index of
    // both number are equal
    // or not.
    if ($n / $gcd_n == $m / $gcd_m and
        $sumFactors_n / $gcd_n ==
        $sumFactors_m / $gcd_m)
        return true;
 
    else
        return false;
}
 
    // Driver code
    $n = 6;
    $m = 28;
    if(checkFriendly($n, $m))
        echo "Yes" ;
    else
        echo "No";
 
// This code is contributed by anuj_67.
?>


Javascript


输出

Yes