# Check whether each Array element can be reduced to minimum element by replacing it with remainder with some X

• Last Updated : 27 Sep, 2021

Given an array arr[] of non-negative integers, the task is to check whether all array elements can be reduced to the minimum element in the array by choosing any positive integer X and update an array element arr[i] to arr[i]%X. If it is possible to do so, then print Yes. Otherwise, print No.

Examples:

Input: arr[] = {1, 1, 3, 4}
Output: Yes
Explanation:
Following operations can be performed to reduce all array elements to 1:

1. Choose X = 2 for array element arr[3], and replacing it with arr[3] % 2, modifies the array arr[] to {1, 1, 1, 4}.
2. Choose X = 3 for array element arr[4], and replacing it with arr[4] % 3, modifies the array arr[] to {1, 1, 1, 1}.

After the above operations all array elements have been reduced to the minimum element of arr[]. Therefore, print Yes.

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

Approach: The given problem can be solved by using an observation that any non-negative integer, say num can be changed to the following integers [0, ceil(num/2) – 1] by choosing the value of X as num/2. It is very evident rest of X will have shorter range of changed numbers than X equal to num/2. Follow the steps below to solve the problem:

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach` `#include ``using` `namespace` `std;` `// Function to check if every integer``// in the array can be reduced to the``// minimum array element``string isPossible(``int` `arr[], ``int` `n)``{``    ``// Stores the minimum array element``    ``int` `mini = INT_MAX;` `    ``// Find the minimum element``    ``for` `(``int` `i = 0; i < n; i++)``        ``mini = min(mini, arr[i]);` `    ``// Traverse the array arr[]``    ``for` `(``int` `i = 0; i < n; i++) {``        ``if` `(arr[i] == mini)``            ``continue``;` `        ``// Stores the maximum value``        ``// in the range``        ``int` `Max = (arr[i] + 1) / 2 - 1;` `        ``// Check whether mini lies in``        ``// the range or not``        ``if` `(mini < 0 || mini > Max)``            ``return` `"No"``;``    ``}` `    ``// Otherwise, return Yes``    ``return` `"Yes"``;``}` `// Driver Code``int` `main()``{``    ``int` `arr[] = { 1, 1, 3, 4 };``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr[0]);` `    ``cout << isPossible(arr, N);` `    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.io.*;``import` `java.util.*;` `class` `GFG{`  `// Function to check if every integer``// in the array can be reduced to the``// minimum array element``static` `String isPossible(``int` `arr[], ``int` `n)``{``    ``// Stores the minimum array element``    ``int` `mini = Integer.MAX_VALUE;` `    ``// Find the minimum element``    ``for` `(``int` `i = ``0``; i < n; i++)``        ``mini = Math.min(mini, arr[i]);` `    ``// Traverse the array arr[]``    ``for` `(``int` `i = ``0``; i < n; i++) {``        ``if` `(arr[i] == mini)``            ``continue``;` `        ``// Stores the maximum value``        ``// in the range``        ``int` `Max = (arr[i] + ``1``) / ``2` `- ``1``;` `        ``// Check whether mini lies in``        ``// the range or not``        ``if` `(mini < ``0` `|| mini > Max)``            ``return` `"No"``;``    ``}` `    ``// Otherwise, return Yes``    ``return` `"Yes"``;``}` `// Driver code``public` `static` `void` `main(String args[])``{``    ``int` `arr[] = { ``1``, ``1``, ``3``, ``4` `};``    ``int` `N = arr.length;` `    ``System.out.print(isPossible(arr, N));` `}``}` `// This code is contributed by code_hunt.`

## Python3

 `# Python 3 program for the above approach` `import` `sys``# Function to check if every integer``# in the array can be reduced to the``# minimum array element``def` `isPossible(arr, n):``    ``# Stores the minimum array element``    ``mini ``=` `sys.maxsize` `    ``# Find the minimum element``    ``for` `i ``in` `range``(n):``        ``mini ``=` `min``(mini, arr[i])` `    ``# Traverse the array arr[]``    ``for` `i ``in` `range``(n):``        ``if` `(arr[i] ``=``=` `mini):``            ``continue` `        ``# Stores the maximum value``        ``# in the range``        ``Max` `=` `(arr[i] ``+` `1``) ``/``/` `2` `-` `1` `        ``# Check whether mini lies in``        ``# the range or not``        ``if` `(mini < ``0` `or` `mini > ``Max``):``            ``return` `"No"` `    ``# Otherwise, return Yes``    ``return` `"Yes"` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ``arr ``=` `[``1``, ``1``, ``3``, ``4``]``    ``N ``=` `len``(arr)` `    ``print``(isPossible(arr, N))``    ` `    ``# This code is contributed by ipg2016107.`

## C#

 `// C# program for the above approach``using` `System;` `public` `class` `GFG``{` `// Function to check if every integer``// in the array can be reduced to the``// minimum array element``static` `String isPossible(``int` `[]arr, ``int` `n)``{``  ` `    ``// Stores the minimum array element``    ``int` `mini = ``int``.MaxValue;` `    ``// Find the minimum element``    ``for` `(``int` `i = 0; i < n; i++)``        ``mini = Math.Min(mini, arr[i]);` `    ``// Traverse the array []arr``    ``for` `(``int` `i = 0; i < n; i++) {``        ``if` `(arr[i] == mini)``            ``continue``;` `        ``// Stores the maximum value``        ``// in the range``        ``int` `Max = (arr[i] + 1) / 2 - 1;` `        ``// Check whether mini lies in``        ``// the range or not``        ``if` `(mini < 0 || mini > Max)``            ``return` `"No"``;``    ``}` `    ``// Otherwise, return Yes``    ``return` `"Yes"``;``}` `// Driver code``public` `static` `void` `Main(String []args)``{``    ``int` `[]arr = { 1, 1, 3, 4 };``    ``int` `N = arr.Length;` `    ``Console.Write(isPossible(arr, N));` `}``}` `// This code is contributed by Princi Singh`

## Javascript

 ``

Output:

`Yes`

Time Complexity: O(N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up