Finding 'k' such that its modulus with each array element is same - GeeksforGeeks

23 Jun, 2021
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
 
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  
Find out the difference ‘d’ between maximum and minimum element of the arrayFind out all the divisors of ‘d’Step 3: For each divisor check if arr[i]%divisor(d) is same or not .if it is same print it.
Find out the difference ‘d’ between maximum and minimum element of the array
Find out all the divisors of ‘d’
Step 3: For each divisor check if arr[i]%divisor(d) is same or not .if it is same print it.
 
C++
Java
Python3
C#
PHP
Javascript
// 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 ivoid 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];         // Case when all the array elements are same    if(d==0){        cout<<"Infinite solution";        return;    }     // 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 functionint main(){    int arr[] = {38, 6, 34};    int n = sizeof(arr)/sizeof(arr[0]);    printEqualModNumbers(arr, n);    return 0;}
//  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];        // Case when all the array elements are same        if(d==0){            System.out.println("Infinite solution");            return;        }        // 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)            {                v.add(i);                if (i != d/i)                    v.add(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);    }}
# Python3 implementation of finding all k# such that arr[i]%k is same for each i # Prints all k such that arr[i]%k is# same for all idef printEqualModNumbers(arr, n):         # sort the numbers    arr.sort();         # max difference will be the difference    # between first and last element of    # sorted array    d = arr[n - 1] - arr[0];    // Case when all the array elements are same    if(d==0):        print("Infinite solution")        return         # Find all divisors of d and store    # in a vector v[]    v = [];    i = 1;    while (i * i <= d):        if (d % i == 0):                v.append(i);                if (i != d / i):                    v.append(d / i);        i += 1;         # check for each v[i] if its modulus with    # each array element is same or not    for i in range(len(v)):        temp = arr[0] % v[i];             # checking for each array element if        # its modulus with k is equal to k or not        j = 1;        while (j < n):            if (arr[j] % v[i] != temp):                break;            j += 1;         # if check is true print v[i]        if (j == n):            print(v[i], end = " "); # Driver Codearr = [38, 6, 34];printEqualModNumbers(arr, len(arr));         # This code is contributed by mits
// C# implementation of finding all k// such that arr[i]%k is same for each iusing System;using System.Collections;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        Array.Sort(arr);             // max difference will be the difference between        // first and last element of sorted array        int d = arr[n-1] - arr[0];        // Case when all the array elements are same        if(d==0){            Console.write("Infinite solution");            return;        }        // Find all divisors of d and store in        // a vector v[]        ArrayList v = new ArrayList();        for (int i=1; i*i<=d; i++)        {            if (d%i == 0)            {                v.Add(i);                if (i != d/i)                    v.Add(d/i);            }        }             // check for each v[i] if its modulus with        // each array element is same or not        for (int i=0; i<v.Count; i++)        {            int temp = arr[0]%(int)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] % (int)v[i] != temp)                    break;                 // if check is true print v[i]            if (j == n)                Console.Write(v[i] + " ");        }    }         // Driver method    public static void Main()    {        int []arr = {38, 6, 34};                 printEqualModNumbers(arr, arr.Length);    }}// This code is contributed by mits
<?php// PHP implementation of finding all k// such that arr[i]%k is same for each i     // Prints all k such that arr[i]%k is same for all i    function printEqualModNumbers ($arr, $n)    {        // sort the numbers        sort($arr);             // max difference will be the difference between        // first and last element of sorted array        $d = $arr[$n-1] - $arr[0];        // Case when all the array elements are same        if(d==0){            print("Infinite solution");            return;        }        // Find all divisors of d and store in        // a vector v[]        $v = array();        for ($i=1; $i*$i<=$d; $i++)        {            if ($d%$i == 0)            {                array_push($v,$i);                if ($i != $d/$i)                    array_push($v,$d/$i);            }        }             // check for each v[i] if its modulus with        // each array element is same or not        for ($i=0; $i<count($v); $i++)        {            $temp = $arr[0]%$v[$i];                 // checking for each array element if            // its modulus with k is equal to k or not            $j=1;            for (; $j<$n; $j++)                if ($arr[$j] % $v[$i] != $temp)                    break;                 // if check is true print v[i]            if ($j == $n)                print($v[$i]." ");        }    }         // Driver method             $arr = array(38, 6, 34);                 printEqualModNumbers($arr, count($arr));         // This code is contributed by mits?>
<script> // JavaScript implementation of finding all k// such that arr[i]%k is same for each i     // Prints all k such that arr[i]%k is same for all i    function printEqualModNumbers (arr, n)    {        // sort the numbers        arr.sort((a, b) => a - b);             // max difference will be the difference between        // first and last element of sorted array        d = arr[n-1] - arr[0];        // Case when all the array elements are same        if(d==0){            document.write("Infinite solution");            return;        }        // Find all divisors of d and store in        // a vector v[]        v = new Array();        for (i=1; i*i<=d; i++)        {            if (d%i == 0)            {                v.push(i);                if (i != d/i)                    v.push(d/i);            }        }             // check for each v[i] if its modulus with        // each array element is same or not        for (i=0; i< v.length; i++)        {            temp = arr[0]%v[i];                 // checking for each array element if            // its modulus with k is equal to k or not            j=1;            for (; j<n; j++)                if (arr[j] % v[i] != temp)                    break;                 // if check is true print v[i]            if (j == n)                document.write(v[i] + " ");        }    }         // Driver method             let arr = new Array(38, 6, 34);                 printEqualModNumbers(arr, arr.length);         // This code is contributed by _saurabh_jaiswal </script>
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 write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
Mithun Kumar
gjaiswal108
_saurabh_jaiswal
Modular Arithmetic
Arrays
Mathematical
Arrays
Mathematical
Modular Arithmetic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Maximum and minimum of an array using minimum number of comparisons
Stack Data Structure (Introduction and Program)
Top 50 Array Coding Problems for Interviews
Multidimensional Arrays in Java
Introduction to Arrays
Program for Fibonacci numbers
Write a program to print all permutations of a given string
C++ Data Types
Set in C++ Standard Template Library (STL)
Coin Change | DP-7