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ą