给定一个由N个整数组成的数组arr [] ,任务是计算给定数组中数组元素对的总数,以使arr [i] * arr [j]为2的幂。
例子:
Input: arr[] = {2, 4, 7, 2}
Output: 3
Explanation:
arr[0] * arr[1] = 8
arr[0] * arr[3] = 4
arr[1] * arr[3] = 8
Input: arr[] = {8, 1, 12, 4, 2}
Output: 6
方法:这个想法基于这样一个事实:如果数字仅包含2作为其主要因子,则该数字为2的幂。因此,其所有除数也是2的幂。请按照以下步骤解决问题:
- 遍历给定的数组。
- 对于每个数组元素,请检查其是否为2的幂。增加此类元素的数量
- 最后,打印(count *(count – 1))/ 2作为所需的计数。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to count pairs having
// product equal to a power of 2
int countPairs(int arr[], int N)
{
// Stores count of array elements
// which are power of 2
int countPowerof2 = 0;
for (int i = 0; i < N; i++) {
// If array element contains
// only one set bit
if (__builtin_popcount(arr[i]) == 1)
// Increase count of
// powers of 2
countPowerof2++;
}
// Count required number of pairs
int desiredPairs
= (countPowerof2
* (countPowerof2 - 1))
/ 2;
// Print the required number of pairs
cout << desiredPairs << ' ';
}
// Driver Code
int main()
{
// Given array
int arr[4] = { 2, 4, 7, 2 };
// Size of the array
int N = sizeof(arr) / sizeof(arr[0]);
// Function Call
countPairs(arr, N);
return 0;
}
Java
// Java program for the
// above approach
import java.util.*;
class GFG{
// Function to count pairs having
// product equal to a power of 2
static void countPairs(int arr[],
int N)
{
// Stores count of array elements
// which are power of 2
int countPowerof2 = 0;
for (int i = 0; i < N; i++)
{
// If array element contains
// only one set bit
if (Integer.bitCount(arr[i]) == 1)
// Increase count of
// powers of 2
countPowerof2++;
}
// Count required number of pairs
int desiredPairs = (countPowerof2 *
(countPowerof2 - 1)) / 2;
// Print the required number of pairs
System.out.print(desiredPairs + " ");
}
// Driver Code
public static void main(String[] args)
{
// Given array
int arr[] = {2, 4, 7, 2};
// Size of the array
int N = arr.length;
// Function Call
countPairs(arr, N);
}
}
// This code is contributed by Rajput-Ji
Python3
# Python3 program for the above approach
# Function to count pairs having
# product equal to a power of 2
def countPairs(arr, N):
# Stores count of array elements
# which are power of 2
countPowerof2 = 0
for i in range(N):
# If array element contains
# only one set bit
if (bin(arr[i]).count('1') == 1):
# Increase count of
# powers of 2
countPowerof2 += 1
# Count required number of pairs
desiredPairs = (countPowerof2 *
(countPowerof2 - 1)) // 2
# Print the required number of pairs
print(desiredPairs)
# Driver Code
if __name__ == '__main__':
# Given array
arr = [ 2, 4, 7, 2 ]
# Size of the array
N = len(arr)
# Function call
countPairs(arr, N)
# This code is contributed by mohit kumar 29
C#
// C# program for the
// above approach
using System;
using System.Linq;
class GFG{
// Function to count pairs having
// product equal to a power of 2
static void countPairs(int []arr,
int N)
{
// Stores count of array elements
// which are power of 2
int countPowerof2 = 0;
for(int i = 0; i < N; i++)
{
// If array element contains
// only one set bit
if ((Convert.ToString(
arr[i], 2)).Count(
f => (f == '1')) == 1)
// Increase count of
// powers of 2
countPowerof2++;
}
// Count required number of pairs
int desiredPairs = (countPowerof2 *
(countPowerof2 - 1)) / 2;
// Print the required number of pairs
Console.WriteLine(desiredPairs + " ");
}
// Driver Code
public static void Main(String[] args)
{
// Given array
int []arr = { 2, 4, 7, 2 };
// Size of the array
int N = arr.Length;
// Function call
countPairs(arr, N);
}
}
// This code is contributed by math_lover
输出:
3
时间复杂度: O(N)
辅助空间: O(1)