Приятелските числа са двойки от две цели числа (a b), така че:
- Сума от правилните делители на a = b и Сума от правилните делители на b = a
където a ≠ b.
Примери: (220284)
java срез
- Правилни делители на 220: 1 2 4 5 10 11 20 22 44 55 110
- Сума = 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
- Правилни делители на 284: 1 2 4 71 142
- Сума = 1 + 2 + 4 + 71 + 142 = 220
Така (220 284) е двойка приятелски числа.
Някои други примери включват:
- (1184 1210)
- (2620 2924)
- (5020 5564)
- (6232 6368)
Пример:
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.
А просто решение е да обходим всяка двойка и да проверим дали образуват приятелска двойка, ако го направят, увеличаваме броя.
pyspark sql
Изпълнение:
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. ?> Изход
2 3
Ан ефикасно решение е да запазим числата, съхранени в карта и за всяко число намираме сумата на неговия правилен делител и проверяваме дали това също присъства в масива. Ако е налице, можем да проверим дали образуват приятелска двойка или не.
Така сложността ще бъде значително намалена. Below is the C++ program for the same.
Изпълнение:
колко града има в Съединените американски щати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>
Изход
2 3
Тази статия е предоставена от Ашутош Кумар
Създаване на тест