# Finding ‘k’ such that its modulus with each array element is same

Given an array of n integers .We need to find all ‘k’ such that

`arr[0] % k = arr[1] % k = ....... = arr[n-1] % k `

Examples:

```Input  : arr[] = {6, 38, 34}
Output : 1 2 4
6%1 = 38%1 = 34%1 = 0
6%2 = 38%2 = 34%2 = 0
6%4 = 38%4 = 34%2 = 2

Input  : arr[] = {3, 2}
Output : 1
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

Suppose the array contains only two elements a and b (b>a). So we can write b = a + d where d is a positive integer and ‘k’ be a number such that b%k = a%k.

```(a + d)%k = a%k
a%k + d%k = a%k
d%k = 0
```

Now what we get from the above calculation is that ‘k’ should be a divisor of difference between the two numbers.
Now what we have to do when we have an array of integers

1. Find out the difference ‘d’ between maximum and minimum element of the array
2. Find out all the divisors of ‘d’
3. Step 3: For each divisor check if arr[i]%divisor(d) is same or not .if it is same print it.

## C++

```// C++ implementation of finding all k
// such that arr[i]%k is same for each i
#include<bits/stdc++.h>
using namespace std;

// Prints all k such that arr[i]%k is same for all i
void printEqualModNumbers (int arr[], int n)
{
// sort the numbers
sort(arr, arr + n);

// max difference will be the difference between
// first and last element of sorted array
int d = arr[n-1] - arr[0];

// Find all divisors of d and store in
// a vector v[]
vector <int> v;
for (int i=1; i*i<=d; i++)
{
if (d%i == 0)
{
v.push_back(i);
if (i != d/i)
v.push_back(d/i);
}
}

// check for each v[i] if its modulus with
// each array element is same or not
for (int i=0; i<v.size(); i++)
{
int temp = arr[0]%v[i];

// checking for each array element if
// its modulus with k is equal to k or not
int j;
for (j=1; j<n; j++)
if (arr[j] % v[i] != temp)
break;

// if check is true print v[i]
if (j == n)
cout << v[i] <<" ";
}
}

// Driver function
int main()
{
int arr[] = {38, 6, 34};
int n = sizeof(arr)/sizeof(arr[0]);
printEqualModNumbers(arr, n);
return 0;
}
```

## Java

```//  Java implementation of finding all k
// such that arr[i]%k is same for each i

import java.util.Arrays;
import java.util.Vector;

class Test
{
// Prints all k such that arr[i]%k is same for all i
static void printEqualModNumbers (int arr[], int n)
{
// sort the numbers
Arrays.sort(arr);

// max difference will be the difference between
// first and last element of sorted array
int d = arr[n-1] - arr[0];

// Find all divisors of d and store in
// a vector v[]
Vector<Integer> v = new Vector<>();
for (int i=1; i*i<=d; i++)
{
if (d%i == 0)
{
if (i != d/i)
}
}

// check for each v[i] if its modulus with
// each array element is same or not
for (int i=0; i<v.size(); i++)
{
int temp = arr[0]%v.get(i);

// checking for each array element if
// its modulus with k is equal to k or not
int j;
for (j=1; j<n; j++)
if (arr[j] % v.get(i) != temp)
break;

// if check is true print v[i]
if (j == n)
System.out.print(v.get(i) + " ");
}
}

// Driver method
public static void main(String args[])
{
int arr[] = {38, 6, 34};

printEqualModNumbers(arr, arr.length);
}
}

```

Output:

```1 2 4
```

This article is contributed by Ayush Jha. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

# GATE CS Corner    Company Wise Coding Practice

3.6 Average Difficulty : 3.6/5.0
Based on 6 vote(s)