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 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++
// 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]; // 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 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]; // 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
# 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 i def 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 Code arr = [38, 6, 34]; printEqualModNumbers(arr, len(arr)); # This code is contributed by mits |
C#
// C# implementation of finding all k // such that arr[i]%k is same for each i using 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 // 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 ?> |
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.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
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.
Recommended Posts:
- Maximize modulus by replacing adjacent pairs with their modulus for any permutation of given Array
- Maximize the sum of modulus with every Array element
- Maximum element in an array such that its previous and next element product is maximum
- Generate Array whose difference of each element with its left yields the given Array
- Count of right shifts for each array element to be in its sorted position
- Find N numbers such that a number and its reverse are divisible by sum of its digits
- Number of triplets such that each value is less than N and each pair sum is a multiple of K
- Cost of rearranging the array such that no element exceeds the sum of its adjacent elements
- Maximum subsequence sum possible by multiplying each element by its index
- Modulus of two float or double numbers
- Modulus of a Complex Number
- Count of Array elements greater than all elements on its left and at least K elements on its right
- Count of Array elements greater than all elements on its left and next K elements on its right
- Count Derangements (Permutation such that no element appears in its original position)
- Check if the given array is same as its inverse permutation
- Rearrange an Array such that Sum of same-indexed subsets differ from their Sum in the original Array
- Find unique pairs such that each element is less than or equal to N
- Count distinct elements after adding each element of First Array with Second Array
- Check if each element of an Array is the Sum of any two elements of another Array
- Smallest N digit number with none of its digits as its divisor

