Count pairs in array whose sum is divisible by K in C++

In this tutorial, we will learn how to count pairs in an array whose sum is divisible by K in C++. Also, given an array and a number K, and we have to count pairs.
For example:

  • Given arr[ ] = { 2, 4, 5, 2, 1, 6} and K = 6
  • 2+4=6 and that is divisible by 6.
  • 4+2 = 6 and that is divisible by 6.
  • 5+1 = 6 and that is also divisible by 6.
  • 6 is divisilbe by itself.
  • Total number of pairs = 4

Simple Approach:

  • We will iterate through every pair of the array by using two for loops.
  • Count the pairs whose sum is divisible by number.
  • Time complexity: O(n^2)

For better performance, we have to reduce this time complexity. So, we will go for a better approach.

Efficient Approach:

  • We will use the hashing technique.
  • Separate elements of an array into a bucket that separation will depend upon mathematical computation.
  • Mathematical computation is their (value mod K).
  • The time complexity of this hashing technique: O(n)
  • Hence, we have reduced the time complexity of our code.

You may also like:
Find count of multiples of 3 or 5 in a given range in C++

Count pairs in an array whose sum is divisible by K in C++

Hence, this is implemented code:

// C++ Program to count pairs
#include<iostream>
#include <bits/stdc++.h> 
using namespace std; 

// Program to count pairs
int countpairs(int arr[], int mani, int k) 
{ 
  // Create a count array to count pairs 
  int count[k] = { 0 }; 

  // Count occurrences of all remaind.
  for (int i = 0; i < mani; i++) 
    ++count[arr[i] % k]; 

  int sumof = count[0] * (count[0] - 1) / 2; 

  // count for all pairs 
  for (int i = 1; i <= k / 2 && i != (k- i); i++) 
    sumof += count[i] * count[k - i]; 
   
  if (k % 2 == 0) 
    sumof+= (count[k / 2] * (count[k / 2] - 1) / 2); 
  return sumof; 
} 


int main() 
{ 

  int arr[] = { 2, 4, 1, 2, 5, 1 }; 
  int mani = sizeof(A) / sizeof(A[0]); 
  int k = 6; 
  cout << countpairs(arr,mani , k); 

  return 0; 
} 

Output:

OUTPUT:  4

 

Leave a Reply

Your email address will not be published. Required fields are marked *