# 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:3ExplanationOnly 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 bu 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 =>

## 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` `?>` |

**Output :**

3

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

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**

In case you wish to attend **live classes **with experts, please refer **DSA Live Classes for Working Professionals **and **Competitive Programming Live for Students**.