给我们一个正整数数组。目标是找到arr []的元素对数,以使条件LCM(arr [i],arr [j])>(arr [i],arr [j])的最小值。即,一对中元素的最低公倍数大于两者中的最小值。
注意-对(arr [i],arr [j])与(arr [j],arr [i])相同。不要数两次。
让我们通过示例来理解。
输入− arr [] = [1,5,4,2]
输出-数组中的对数,使得LCM(arr [i],arr [j])> min(arr [i],arr [j])为-6
说明-总共6对-
Pair 1 (1,5) LCM is 5 > 1 Pair 2 (1,4) LCM is 4 > 1 Pair 3 (1,2) LCM is 2 > 1 Pair 4 (5,4) LCM is 20 > 4 Pair 5 (5,2) LCM is 10 > 2 Pair 6 (4,2) LCM is 4 > 2
输入− arr [] = [3,3,6]
输出-数组中的对数,使得LCM(arr [i],arr [j])> min(arr [i],arr [j])为− 2
说明-总共2对-
Pair 1 (3,6) LCM is 6 > 3 Pair 2 (3,6) LCM is 6 > 3
仅当arr [i] == arr [j]时,以上条件才为假。成对将在独特元素之间形成。取得包含数组唯一元素频率的无序映射。现在删除所有相似的元素对。对于每个频率,将最大对计算为(freq *(freq-1)/ 2)。将所有此类计算相加。
总数组具有大小元素,则最大对= size(size-1)/ 2。
结果将是对数。(所有对-具有相同元素的对)。
取一个整数数组。
取一个整数数组。
函数conditional_pair(int arr [],int size)获取数组及其大小,并返回对数,以便满足条件。
将初始计数设为0。
取unordered_map <int,int> um作为arr []的元素及其频率。
使用for和for每个频率的导线图temp = it.second; (它=迭代器)加temp *(temp-1)/ 2进行计数。临时数量的所有可能的对。
现在count具有所有相同元素对,在我们的案例中将不考虑。
计算数组元素的总可能对为temp = size *(size-1)/ 2。
更新计数为计数-温度
返回计数作为结果。
#include <bits/stdc++.h> using namespace std; int conditional_pair(int arr[], int size){ int count = 0; unordered_map<int, int> um; for (int i = 0; i < size; i++){ um[arr[i]]++; } for (auto it : um){ int temp = it.second; count = count + temp * (temp - 1) / 2; } int temp = (size * (size - 1)) / 2; count = temp - count; return count; } int main(){ int arr[] = { 4, 1, 7, 3, 2}; int size = sizeof(arr) / sizeof(arr[0]); cout<<"Count of pairs in an array such that LCM(arr[i], arr[j]) > min(arr[i],arr[j]) are: "<<conditional_pair(arr, size); return 0; }
输出结果
如果我们运行上面的代码,它将生成以下输出-
Count of pairs in an array such that LCM(arr[i], arr[j]) > min(arr[i],arr[j]) are: 10