

Consider an array of size four. The elements of the array are { -4, 5, 6, 1}.
The value of K is 4.
The subarrays whose sum is divisible by 4 are as follows:
[ -4 ]
[-4, 5, 6, 1]
[ 5, 6, 1]
Hence, there are three subarrays whose sum is divisible by 4.
The first line of input contains an integer T, the number of test cases.
The first line of every test case contains two space-separated integers ‘N’ and ‘K‘ denoting the size of the array and the positive integer K.
The second line of every test case contains ‘N’ space-separated integers.
For every test case, print the count of the subarrays whose sum is divisible by K.
The output of each test case is printed in a separate line.
You don’t have to print anything, it has already been taken care of. Just implement the function.
1 <= T <= 10
1 <= N <= 10^5
1 <= K <= 10^3
-10^3 <= data <= 10^3
Where ‘data’ denotes the value of the elements of the array.
Time Limit: 1 sec
The O(N^2) solution is trivial, can you solve it in less than O(N^2) time?
The idea is very simple. We will generate all the possible subarrays of the given array. Now, we will find the sum of each subarray and keep track of the count of the subarrays whose sum is divisible by K.
When we divide the sum of any subarray by K, the possible remainders we can get are 0, 1, 2,... K-1.
Consider two subarrays subArray(0, i) and subArray(0, j) where j > i.
Let’s say that when we divide the sum of the subarray(0, i) by K, we get the remainder ‘rem’.
Also, when we divide the sum of the subarray(0, j) by K, we get the same remainder ‘rem’.
It means that sum(subArray(0, i)) % K == sum(subArray(0, j)) % K.
Now, we can conclude that the sum of subarray(i + 1, j) leaves 0 as a remainder when divided by K. It means that the sum of the subarray(i+1, j) is completely divisible by K.
Thus, we will use an auxiliary array to store the remainders obtained by dividing the sum of subarrays. So, for current index j, we need to find out how many indexes i (i < j) exist that have the same mod of K.
For example, consider an array [ 2, 3, 4, 5, 6, 7] and K = 2.
Sum of the subarray [2, 3] = 5 and rem is 5%2 = 1.
Sum of the subarray [2, 3, 4] = 9 and rem is 9%2 = 1.
It means that the subarray [2, 3, 4] - subarray[2, 3] leaves a remainder of 0 when divided by 2.
As we can see, 4 is completely divisible by 2.
Algorithm