logo

Draugiškų skaičių poros

Draugiški skaičiai yra dviejų sveikųjų skaičių poros (a b), kurios:

  • A = b tinkamų daliklių suma ir b = a tinkamų daliklių suma

kur a ≠ b.

Pavyzdžiai: (220284)



  • Tinkami 220 dalikliai: 1 2 4 5 10 11 20 22 44 55 110
    • Suma = 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
  • Tinkami 284 dalikliai: 1 2 4 71 142
    • Suma = 1 + 2 + 4 + 71 + 142 = 220

Taigi (220 284) yra draugiškų skaičių pora.

Kai kurie kiti pavyzdžiai:

  • (1184 1210)
  • (2620 2924)
  • (5020 5564)
  • (6232 6368)

Pavyzdys:

Input : arr[] = {220 284 1184 1210 2 5}  
Output : 2
Explanation : (220 284) and (1184 1210) form amicable pair.

Input : arr[] = {2620 2924 5020 5564 6232 6368}
Output : 3
Explanation : (2620 2924) (5020 5564) and (6232 6368) forms amicable pair.

A paprastas sprendimas yra pereiti kiekvieną porą ir patikrinti, ar jos sudaro draugišką porą, jei taip, padidinsime skaičių. 

Įgyvendinimas:

C++
// A simple C++ program to count  // amicable pairs in an array. #include    using namespace std; // Calculate the sum // of proper divisors int sumOfDiv(int x) {  // 1 is a proper divisor  int sum = 1;  for (int i = 2; i <= sqrt(x); i++)   {  if (x % i == 0)   {  sum += i;  // To handle perfect squares  if (x / i != i)  sum += x / i;  }  }  return sum; } // Check if pair is amicable bool isAmicable(int a int b) {  return (sumOfDiv(a) == b &&   sumOfDiv(b) == a); } // This function prints pair  // of amicable pairs present  // in the input array int countPairs(int arr[] int n) {  int count = 0;  // Iterate through each   // pair and find if it  // an amicable pair  for (int i = 0; i < n; i++)  for (int j = i + 1; j < n; j++)  if (isAmicable(arr[i] arr[j]))  count++;  return count; } // Driver code int main() {  int arr1[] = { 220 284 1184   1210 2 5 };  int n1 = sizeof(arr1) / sizeof(arr1[0]);  cout << countPairs(arr1 n1)   << endl;  int arr2[] = { 2620 2924 5020   5564 6232 6368 };  int n2 = sizeof(arr2) / sizeof(arr2[0]);  cout << countPairs(arr2 n2);  return 0; } 
Java
// A simple Java program to count // amicable pairs in an array. import java.io.*; class GFG  {  // Calculate the sum   // of proper divisors  static int sumOfDiv(int x)  {  // 1 is a proper divisor  int sum = 1;  for (int i = 2; i <= Math.sqrt(x); i++)   {  if (x % i == 0)   {  sum += i;  // To handle perfect squares  if (x / i != i)  sum += x / i;  }  }  return sum;  }  // Check if pair is amicable  static boolean isAmicable(int a int b)  {  return (sumOfDiv(a) == b &&   sumOfDiv(b) == a);  }  // This function prints pair  // of amicable pairs present  // in the input array  static int countPairs(int arr[] int n)  {  int count = 0;  // Iterate through each pair   // and find if it an amicable pair  for (int i = 0; i < n; i++)  for (int j = i + 1; j < n; j++)  if (isAmicable(arr[i] arr[j]))  count++;  return count;  }  // Driver code  public static void main(String args[])  {  int arr1[] = { 220 284 1184   1210 2 5 };  int n1 = arr1.length;  System.out.println(countPairs(arr1 n1));  int arr2[] = { 2620 2924 5020  5564 6232 6368 };  int n2 = arr2.length;  System.out.println(countPairs(arr2 n2));  } } // This code is contributed by Anshika Goyal. 
Python
# Python3 program to count  # amicable pairs in an array # Calculate the sum  # of proper divisors def sumOfDiv(x): sum = 1 for i in range(2 x): if x % i == 0: sum += i return sum # Check if pair is amicable def isAmicable(a b): if sumOfDiv(a) == b and sumOfDiv(b) == a: return True else: return False # This function prints pair  # of amicable pairs present  # in the input array def countPairs(arr n): count = 0 for i in range(0 n): for j in range(i + 1 n): if isAmicable(arr[i] arr[j]): count = count + 1 return count # Driver Code arr1 = [220 284 1184 1210 2 5] n1 = len(arr1) print(countPairs(arr1 n1)) arr2 = [2620 2924 5020 5564 6232 6368] n2 = len(arr2) print(countPairs(arr2 n2)) # This code is contributed  # by Smitha Dinesh Semwal 
C#
// A simple C# program to count  // amicable pairs in an array. using System; class GFG  {    // Calculate the sum  // of proper divisors  static int sumOfDiv(int x)  {    // 1 is a proper divisor  int sum = 1;  for (int i = 2; i <= Math.Sqrt(x); i++)   {  if (x % i == 0)   {  sum += i;  // To handle perfect squares  if (x / i != i)  sum += x / i;  }  }    return sum;  }  // Check if pair is amicable  static bool isAmicable(int a int b)  {  return (sumOfDiv(a) == b &&  sumOfDiv(b) == a);  }  // This function prints pair  // of amicable pairs present   // in the input array  static int countPairs(int []arr int n)  {  int count = 0;  // Iterate through each pair   // and find if it an amicable pair  for (int i = 0; i < n; i++)    for (int j = i + 1; j < n; j++)  if (isAmicable(arr[i] arr[j]))  count++;  return count;  }  // Driver code  public static void Main()   {  int []arr1 = {220 284 1184   1210 2 5};  int n1 = arr1.Length;    Console.WriteLine(countPairs(arr1 n1));  int []arr2 = {2620 2924 5020   5564 6232 6368};  int n2 = arr2.Length;  Console.WriteLine(countPairs(arr2 n2));  } } // This code is contributed by vt_m. 
JavaScript
<script>  // A simple Javascript program to count   // amicable pairs in an array.    // Calculate the sum  // of proper divisors  function sumOfDiv(x)  {    // 1 is a proper divisor  let sum = 1;  for (let i = 2; i <= Math.sqrt(x); i++)   {  if (x % i == 0)   {  sum += i;    // To handle perfect squares  if (parseInt(x / i 10) != i)  sum += parseInt(x / i 10);  }  }    return sum;  }    // Check if pair is amicable  function isAmicable(a b)  {  return (sumOfDiv(a) == b &&  sumOfDiv(b) == a);  }    // This function prints pair  // of amicable pairs present   // in the input array  function countPairs(arr n)  {  let count = 0;    // Iterate through each pair   // and find if it an amicable pair  for (let i = 0; i < n; i++)    for (let j = i + 1; j < n; j++)  if (isAmicable(arr[i] arr[j]))  count++;    return count;  }    let arr1 = [220 284 1184 1210 2 5];  let n1 = arr1.length;  document.write(countPairs(arr1 n1) + '
'
); let arr2 = [2620 2924 5020 5564 6232 6368]; let n2 = arr2.length; document.write(countPairs(arr2 n2)); </script>
PHP
 // A simple PHP program to count  // amicable pairs in an array. // Calculate the sum  // of proper divisors function sumOfDiv( $x) { // 1 is a proper divisor $sum = 1; for ( $i = 2; $i <= sqrt($x); $i++) { if ($x % $i == 0) { $sum += $i; // To handle perfect squares if ($x / $i != $i) $sum += $x / $i; } } return $sum; } // Check if pair is amicable function isAmicable( $a $b) { return (sumOfDiv($a) == $b and sumOfDiv($b) == $a); } // This function prints pair  // of amicable pairs present  // in the input array function countPairs( $arr $n) { $count = 0; // Iterate through each pair  // and find if it an amicable pair for ( $i = 0; $i < $n; $i++) for ( $j = $i + 1; $j < $n; $j++) if (isAmicable($arr[$i] $arr[$j])) $count++; return $count; } // Driver code $arr1 = array( 220 284 1184 1210 2 5 ); $n1 = count($arr1); echo countPairs($arr1 $n1)'n'; $arr2 = array( 2620 2924 5020 5564 6232 6368 ); $n2 = count($arr2); echo countPairs($arr2 $n2); // This code is contributed by anuj_67. ?> 

Išvestis
2 3

An efektyvus sprendimas yra išsaugoti skaičius žemėlapyje ir kiekvienam skaičiui randame tinkamo daliklio sumą ir patikriname, ar ji taip pat yra masyve. Jei jis yra, galime patikrinti, ar jie sudaro draugišką porą, ar ne.

Taigi sudėtingumas būtų žymiai sumažintas. Žemiau yra to paties C++ programa. 

Įgyvendinimas:

C++
// Efficient C++ program to count  // Amicable pairs in an array. #include    using namespace std; // Calculate the sum  // of proper divisors int sumOfDiv(int x) {  // 1 is a proper divisor  int sum = 1;  for (int i = 2; i <= sqrt(x); i++)   {  if (x % i == 0) {  sum += i;  // To handle perfect squares  if (x / i != i)  sum += x / i;  }  }  return sum; } // Check if pair is amicable bool isAmicable(int a int b) {  return (sumOfDiv(a) == b &&   sumOfDiv(b) == a); } // This function prints count  // of amicable pairs present  // in the input array int countPairs(int arr[] int n) {  // Map to store the numbers  unordered_set<int> s;  int count = 0;  for (int i = 0; i < n; i++)  s.insert(arr[i]);  // Iterate through each number   // and find the sum of proper   // divisors and check if it's   // also present in the array  for (int i = 0; i < n; i++)   {  if (s.find(sumOfDiv(arr[i])) != s.end())   {  // It's sum of proper divisors  int sum = sumOfDiv(arr[i]);  if (isAmicable(arr[i] sum))  count++;  }  }  // As the pairs are counted   // twice thus divide by 2  return count / 2; } // Driver code int main() {  int arr1[] = { 220 284 1184   1210 2 5 };  int n1 = sizeof(arr1) / sizeof(arr1[0]);  cout << countPairs(arr1 n1)   << endl;    int arr2[] = { 2620 2924 5020   5564 6232 6368 };  int n2 = sizeof(arr2) / sizeof(arr2[0]);  cout << countPairs(arr2 n2)   << endl;  return 0; } 
Java
// Efficient Java program to count  // Amicable pairs in an array. import java.util.*; class GFG  { // Calculate the sum  // of proper divisors static int sumOfDiv(int x) {  // 1 is a proper divisor  int sum = 1;  for (int i = 2; i <= Math.sqrt(x); i++)   {  if (x % i == 0)   {  sum += i;  // To handle perfect squares  if (x / i != i)  sum += x / i;  }  }  return sum; } // Check if pair is amicable static boolean isAmicable(int a int b) {  return (sumOfDiv(a) == b &&   sumOfDiv(b) == a); } // This function prints count  // of amicable pairs present  // in the input array static int countPairs(int arr[] int n) {  // Map to store the numbers  HashSet<Integer> s = new HashSet<Integer>();  int count = 0;  for (int i = 0; i < n; i++)  s.add(arr[i]);  // Iterate through each number   // and find the sum of proper   // divisors and check if it's   // also present in the array  for (int i = 0; i < n; i++)   {  if (s.contains(sumOfDiv(arr[i])))   {  // It's sum of proper divisors  int sum = sumOfDiv(arr[i]);  if (isAmicable(arr[i] sum))  count++;  }  }  // As the pairs are counted   // twice thus divide by 2  return count / 2; } // Driver code public static void main(String[] args)  {  int arr1[] = { 220 284 1184   1210 2 5 };  int n1 = arr1.length;  System.out.println(countPairs(arr1 n1));    int arr2[] = { 2620 2924 5020   5564 6232 6368 };  int n2 = arr2.length;  System.out.println(countPairs(arr2 n2)); } } // This code is contributed by PrinciRaj1992  
Python
# Efficient Python3 program to count  # Amicable pairs in an array. import math # Calculating the sum # of proper divisors def sumOfDiv(x): # 1 is a proper divisor sum = 1; for i in range(2int(math.sqrt(x))): if x % i==0: sum += i # To handle perfect squares if i != x/i: sum += x/i return int(sum); # check if pair is amicable def isAmicable(a b): return (sumOfDiv(a) == b and sumOfDiv(b) == a) # This function prints count  # of amicable pairs present  # in the input array def countPairs(arrn): # Map to store the numbers s = set() count = 0 for i in range(n): s.add(arr[i]) # Iterate through each number  # and find the sum of proper  # divisors and check if it's  # also present in the array for i in range(n): if sumOfDiv(arr[i]) in s: # It's sum of proper divisors sum = sumOfDiv(arr[i]) if isAmicable(arr[i] sum): count += 1 # As the pairs are counted  # twice thus divide by 2 return int(count/2); # Driver Code  arr1 = [220 284 1184 1210 2 5] n1 = len(arr1) print(countPairs(arr1 n1)) arr2 = [2620 2924 5020 5564 6232 6368] n2 = len(arr2) print(countPairs(arr2 n2)) # This code is contributed  # by Naveen Babbar 
C#
// Efficient C# program to count  // Amicable pairs in an array. using System; using System.Collections.Generic;   class GFG  { // Calculate the sum  // of proper divisors static int sumOfDiv(int x) {  // 1 is a proper divisor  int sum = 1;  for (int i = 2; i <= Math.Sqrt(x); i++)   {  if (x % i == 0)   {  sum += i;  // To handle perfect squares  if (x / i != i)  sum += x / i;  }  }  return sum; } // Check if pair is amicable static Boolean isAmicable(int a int b) {  return (sumOfDiv(a) == b &&   sumOfDiv(b) == a); } // This function prints count  // of amicable pairs present  // in the input array static int countPairs(int []arr int n) {  // Map to store the numbers  HashSet<int> s = new HashSet<int>();  int count = 0;  for (int i = 0; i < n; i++)  s.Add(arr[i]);  // Iterate through each number   // and find the sum of proper   // divisors and check if it's   // also present in the array  for (int i = 0; i < n; i++)   {  if (s.Contains(sumOfDiv(arr[i])))   {  // It's sum of proper divisors  int sum = sumOfDiv(arr[i]);  if (isAmicable(arr[i] sum))  count++;  }  }  // As the pairs are counted   // twice thus divide by 2  return count / 2; } // Driver code public static void Main(String[] args)  {  int []arr1 = { 220 284 1184   1210 2 5 };  int n1 = arr1.Length;  Console.WriteLine(countPairs(arr1 n1));    int []arr2 = { 2620 2924 5020   5564 6232 6368 };  int n2 = arr2.Length;  Console.WriteLine(countPairs(arr2 n2)); } } // This code is contributed by Princi Singh 
JavaScript
<script> // JavaScript program to count // Amicable pairs in an array. // Calculate the sum // of proper divisors function sumOfDiv(x) {  // 1 is a proper divisor  let sum = 1;  for (let i = 2; i <= Math.sqrt(x); i++)  {  if (x % i == 0)  {  sum += i;    // To handle perfect squares  if (x / i != i)  sum += x / i;  }  }  return sum; }   // Check if pair is amicable function isAmicable(a b) {  return (sumOfDiv(a) == b &&  sumOfDiv(b) == a); }   // This function prints count // of amicable pairs present // in the input array function countPairs(arr n) {  // Map to store the numbers  let s = new Set();  let count = 0;  for (let i = 0; i < n; i++)  s.add(arr[i]);    // Iterate through each number  // and find the sum of proper  // divisors and check if it's  // also present in the array  for (let i = 0; i < n; i++)  {  if (s.has(sumOfDiv(arr[i])))  {  // It's sum of proper divisors  let sum = sumOfDiv(arr[i]);  if (isAmicable(arr[i] sum))  count++;  }  }    // As the pairs are counted  // twice thus divide by 2  return Math.floor(count / 2); }    // Driver code     let arr1 = [ 220 284 1184  1210 2 5 ];  let n1 = arr1.length;  document.write(countPairs(arr1 n1) + '  
'
); let arr2 = [ 2620 2924 5020 5564 6232 6368 ]; let n2 = arr2.length; document.write(countPairs(arr2 n2) + '
'
); </script>

Išvestis
2 3

Prie šio straipsnio prisidėjo Ašutušas Kumaras  

Sukurti viktoriną