给定两个正整数N , M 。任务是检查N和M是否为友好对。
In number theory, friendly pairs are two numbers with a common abundancy index, the ratio between the sum of divisors of a number and the number itself i.e ?(n)/n. S o, two number n and m are friendly number if
?(n)/n = ?(m)/m.
where ?(n) is the sum of divisors of n.
例子:
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