# Count pairs in array whose sum is divisible by 4

Given a array if ‘n’ positive integers. Count number of pairs of integers in the array that have the sum divisible by 4.

**Examples :**

Input:{2, 2, 1, 7, 5}Output:3Explanation:Only three pairs are possible whose sum is divisible by '4' i.e., (2, 2), (1, 7) and (7, 5)Input:{2, 2, 3, 5, 6}Output:4

**Naive approach** is to iterate through every pair of array but using two nested for loops and count those pairs whose sum is divisible by ‘4’. Time complexity of this approach is O(n^{2}).

**Efficient approach** is to use Hashing technique. There are only three condition that can arise whose sum is divisible by ‘4’ i.e,

- If both are divisible by 4.
- If one of them is equal to
**1 modulo 4**and other is**3 modulo 4**. For instance, (1, 3), (5, 7), (5, 11). - If both of them is equal to
**2 modulo 4**i.e., (2, 2), (2, 6), (6, 10)

Store all modulo in freq[] array such that freq[i] = number of array elements that are equal to

i modulo 4

Thus answer =>

**Implementation:**

## C++

`// C++ Program to count pairs` `// whose sum divisible by '4'` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Program to count pairs whose sum divisible` `// by '4'` `int` `count4Divisibiles(` `int` `arr[], ` `int` `n)` `{` ` ` `// Create a frequency array to count` ` ` `// occurrences of all remainders when` ` ` `// divided by 4` ` ` `int` `freq[4] = {0, 0, 0, 0};` ` ` `// Count occurrences of all remainders` ` ` `for` `(` `int` `i = 0; i < n; i++)` ` ` `++freq[arr[i] % 4];` ` ` `// If both pairs are divisible by '4'` ` ` `int` `ans = freq[0] * (freq[0] - 1) / 2;` ` ` `// If both pairs are 2 modulo 4` ` ` `ans += freq[2] * (freq[2] - 1) / 2;` ` ` `// If one of them is equal` ` ` `// to 1 modulo 4 and the` ` ` `// other is equal to 3` ` ` `// modulo 4` ` ` `ans += freq[1] * freq[3];` ` ` `return` `ans;` `}` `// Driver code` `int` `main()` `{` ` ` `int` `arr[] = { 2, 2, 1, 7, 5 };` ` ` `int` `n = ` `sizeof` `(arr) / ` `sizeof` `(arr[0]);` ` ` `cout << count4Divisibiles(arr, n);` ` ` `return` `0;` `}` |

## Java

`// Java program to count pairs` `// whose sum divisible by '4'` `import` `java.util.*;` `class` `Count{` ` ` `public` `static` `int` `count4Divisibiles(` `int` `arr[] ,` ` ` `int` `n )` ` ` `{` ` ` `// Create a frequency array to count` ` ` `// occurrences of all remainders when` ` ` `// divided by 4` ` ` `int` `freq[] = {` `0` `, ` `0` `, ` `0` `, ` `0` `};` ` ` `int` `i = ` `0` `;` ` ` `int` `ans;` ` ` ` ` `// Count occurrences of all remainders` ` ` `for` `(i = ` `0` `; i < n; i++)` ` ` `++freq[arr[i] % ` `4` `];` ` ` ` ` `//If both pairs are divisible by '4'` ` ` `ans = freq[` `0` `] * (freq[` `0` `] - ` `1` `) / ` `2` `;` ` ` ` ` `// If both pairs are 2 modulo 4` ` ` `ans += freq[` `2` `] * (freq[` `2` `] - ` `1` `) / ` `2` `;` ` ` ` ` `// If one of them is equal` ` ` `// to 1 modulo 4 and the` ` ` `// other is equal to 3` ` ` `// modulo 4` ` ` `ans += freq[` `1` `] * freq[` `3` `];` ` ` ` ` `return` `(ans);` ` ` `}` ` ` `public` `static` `void` `main(String[] args)` ` ` `{` ` ` `int` `arr[] = {` `2` `, ` `2` `, ` `1` `, ` `7` `, ` `5` `};` ` ` `int` `n = ` `5` `;` ` ` `System.out.print(count4Divisibiles(arr, n));` ` ` `}` `}` `// This code is contributed by rishabh_jain` |

## Python3

`# Python3 code to count pairs whose` `# sum is divisible by '4'` `# Function to count pairs whose` `# sum is divisible by '4'` `def` `count4Divisibiles( arr , n ):` ` ` ` ` `# Create a frequency array to count` ` ` `# occurrences of all remainders when` ` ` `# divided by 4` ` ` `freq ` `=` `[` `0` `, ` `0` `, ` `0` `, ` `0` `]` ` ` ` ` `# Count occurrences of all remainders` ` ` `for` `i ` `in` `range` `(n):` ` ` `freq[arr[i] ` `%` `4` `]` `+` `=` `1` ` ` ` ` `#If both pairs are divisible by '4'` ` ` `ans ` `=` `freq[` `0` `] ` `*` `(freq[` `0` `] ` `-` `1` `) ` `/` `2` ` ` ` ` `# If both pairs are 2 modulo 4` ` ` `ans ` `+` `=` `freq[` `2` `] ` `*` `(freq[` `2` `] ` `-` `1` `) ` `/` `2` ` ` ` ` `# If one of them is equal` ` ` `# to 1 modulo 4 and the` ` ` `# other is equal to 3` ` ` `# modulo 4` ` ` `ans ` `+` `=` `freq[` `1` `] ` `*` `freq[` `3` `]` ` ` ` ` `return` `int` `(ans)` `# Driver code` `arr ` `=` `[` `2` `, ` `2` `, ` `1` `, ` `7` `, ` `5` `]` `n ` `=` `len` `(arr)` `print` `(count4Divisibiles(arr, n))` `# This code is contributed by "Sharad_Bhardwaj".` |

## C#

`// C# program to count pairs` `// whose sum divisible by '4'` `using` `System;` `class` `Count{` ` ` `public` `static` `int` `count4Divisibiles(` `int` `[]arr ,` ` ` `int` `n )` ` ` `{` ` ` `// Create a frequency array to count` ` ` `// occurrences of all remainders when` ` ` `// divided by 4` ` ` `int` `[]freq = {0, 0, 0, 0};` ` ` `int` `i = 0;` ` ` `int` `ans;` ` ` ` ` `// Count occurrences of all remainders` ` ` `for` `(i = 0; i < n; i++)` ` ` `++freq[arr[i] % 4];` ` ` ` ` `//If both pairs are divisible by '4'` ` ` `ans = freq[0] * (freq[0] - 1) / 2;` ` ` ` ` `// If both pairs are 2 modulo 4` ` ` `ans += freq[2] * (freq[2] - 1) / 2;` ` ` ` ` `// If one of them is equal` ` ` `// to 1 modulo 4 and the` ` ` `// other is equal to 3` ` ` `// modulo 4` ` ` `ans += freq[1] * freq[3];` ` ` ` ` `return` `(ans);` ` ` `}` ` ` ` ` `// Driver code` ` ` `public` `static` `void` `Main()` ` ` `{` ` ` `int` `[]arr = {2, 2, 1, 7, 5};` ` ` `int` `n = 5;` ` ` `Console.WriteLine(count4Divisibiles(arr, n));` ` ` `}` `}` `// This code is contributed by vt_m` |

## PHP

`<?php` `// PHP Program to count pairs` `// whose sum divisible by '4'` `// Program to count pairs whose` `// sum divisible by '4'` `function` `count4Divisibiles(` `$arr` `, ` `$n` `)` `{` ` ` `// Create a frequency array to` ` ` `// count occurrences of all` ` ` `// remainders when divided by 4` ` ` `$freq` `= ` `array` `(0, 0, 0, 0);` ` ` `// Count occurrences` ` ` `// of all remainders` ` ` `for` `( ` `$i` `= 0; ` `$i` `< ` `$n` `; ` `$i` `++)` ` ` `++` `$freq` `[` `$arr` `[` `$i` `] % 4];` ` ` `// If both pairs are` ` ` `// divisible by '4'` ` ` `$ans` `= ` `$freq` `[0] *` ` ` `(` `$freq` `[0] - 1) / 2;` ` ` `// If both pairs are` ` ` `// 2 modulo 4` ` ` `$ans` `+= ` `$freq` `[2] *` ` ` `(` `$freq` `[2] - 1) / 2;` ` ` `// If one of them is equal` ` ` `// to 1 modulo 4 and the` ` ` `// other is equal to 3` ` ` `// modulo 4` ` ` `$ans` `+= ` `$freq` `[1] * ` `$freq` `[3];` ` ` `return` `$ans` `;` `}` `// Driver code` `$arr` `= ` `array` `(2, 2, 1, 7, 5);` `$n` `= sizeof(` `$arr` `) ;` `echo` `count4Divisibiles(` `$arr` `, ` `$n` `);` `// This code is contributed by ajit` `?>` |

## Javascript

`// JavaScript Program to count pairs` `// whose sum divisible by '4'` `// Program to count pairs whose sum divisible` `// by '4'` `function` `count4Divisibiles(arr, n)` `{` ` ` `// Create a frequency array to count` ` ` `// occurrences of all remainders when` ` ` `// divided by 4` ` ` `let freq = [0, 0, 0, 0];` ` ` `// Count occurrences of all remainders` ` ` `for` `(` `var` `i = 0; i < n; i++)` ` ` `++freq[arr[i] % 4];` ` ` `// If both pairs are divisible by '4'` ` ` `let ans = Math.floor(freq[0] * (freq[0] - 1) / 2);` ` ` `// If both pairs are 2 modulo 4` ` ` `ans += Math.floor(freq[2] * (freq[2] - 1) / 2);` ` ` `// If one of them is equal` ` ` `// to 1 modulo 4 and the` ` ` `// other is equal to 3` ` ` `// modulo 4` ` ` `ans += freq[1] * freq[3];` ` ` `return` `ans;` `}` `// Driver code` `let arr = [ 2, 2, 1, 7, 5 ];` `let n = arr.length;` `console.log(count4Divisibiles(arr, n));` `// This code is contributed by phasing17` |

**Output**

3

**Time complexity: O(n)****Auxiliary space: O(1)**