# Check if all array elements can be reduced to less than X

• Last Updated : 04 May, 2021

Given an array A[] consisting of N positive integers and an integer X, the task is to determine if it is possible to convert all array elements to less than X by performing the following operations:

• Select 2 distinct indices j and k.
• Select an index i, where A[i] > X.
• Replace A[i] = gcd(A[j], A[k]) if and only if gcd(A[j], A[k]) ≠ 1.

Examples:

Input: A[] = {2, 1, 5, 3, 6}, X = 4
Output: Yes
Explanation:

• Selecting i = 3, j = 4, k = 5, set A[i] = gcd(A[j], A[k]) = 3. Therefore, A[] modifies to {2, 1, 3, 3, 6}.
• Selecting i = 5, j = 4, k = 5, set A[i] = gcd(A[j], A[k]) = 3. Therefore, A[] modifies to {2, 1, 3, 3, 3}.

Input: A[] = {2, 3, 2, 5, 4}, X = 3
Output: Yes

Approach: Follow the steps below to solve the problem:

1. Find the two numbers having gcd ≠ 1 as well as gcd ≤ X, then, by using these two numbers, the required number A[i] can be replaced with gcd(A[j], A[k]).
2. Using the fact that gcd(x, y) ≤ min(x, y), the array elements can be reduced to ≤ X.
3. This way, the rest of the array can be converted to ≤ X using step 2.

Below is the implementation of the above approach:

## C++

 `// C++ program to implement``// the above approach``#include ``using` `namespace` `std;` `// Function to check if all array``// elements are≤ X``bool` `check(``int` `A[], ``int` `X, ``int` `N)``{``    ``for``(``int` `i = 0; i < N; i++)``    ``{``        ``if` `(A[i] > X)``        ``{``            ``return` `false``;``        ``}``    ``}``    ``return` `true``;``}` `// Function to check if all array elements``// can be reduced to less than X or not``bool` `findAns(``int` `A[], ``int` `N, ``int` `X)``{``    ` `    ``// Checks if all array elements``    ``// are already ≤ X or not``    ``if` `(check(A, X, N))``    ``{``        ``return` `true``;``    ``}` `    ``// Traverse every possible pair``    ``for``(``int` `i = 0; i < N; i++)``    ``{``        ``for``(``int` `j = i + 1; j < N; j++)``        ``{``            ` `            ``// Calculate GCD of two``            ``// array elements``            ``int` `g = __gcd(A[i], A[j]);` `            ``// If gcd is ≠ 1``            ``if` `(g != 1)``            ``{``                ` `                ``// If gcd is ≤ X, then a pair``                ``// is present to reduce all``                ``// array elements to ≤ X``                ``if` `(g <= X)``                ``{``                    ``return` `true``;``                ``}``            ``}``        ``}``    ``}``    ` `    ``// If no pair is present``    ``// with gcd is ≤ X``    ``return` `false``;``}` `// Driver Code``int` `main()``{``    ``int` `X = 4;``    ``int` `A[] = { 2, 1, 5, 3, 6 };``    ``int` `N = 5;``    ` `    ``if` `(findAns(A, N, X))``    ``{``        ``cout << ``"true"``;``    ``}``    ``else``    ``{``        ``cout << ``"false"``;``    ``}``}` `// This code is contributed by mohit kumar 29`

## Java

 `// Java Program to implement``// the above approach` `import` `java.io.*;``import` `java.util.Arrays;` `class` `GFG {` `    ``// Function to check if all array elements``    ``// can be reduced to less than X or not``    ``public` `static` `boolean` `findAns(``        ``int``[] A, ``int` `N, ``int` `X)``    ``{``        ``// Checks if all array elements``        ``// are already ≤ X or not``        ``if` `(check(A, X)) {``            ``return` `true``;``        ``}` `        ``// Traverse every possible pair``        ``for` `(``int` `i = ``0``; i < N; i++) {``            ``for` `(``int` `j = i + ``1``; j < N; j++) {` `                ``// Calculate GCD of two``                ``// array elements``                ``int` `gcd = gcd(A[i], A[j]);` `                ``// If gcd is ≠ 1``                ``if` `(gcd != ``1``) {` `                    ``// If gcd is ≤ X, then a pair``                    ``// is present to reduce all``                    ``// array elements to ≤ X``                    ``if` `(gcd <= X) {` `                        ``return` `true``;``                    ``}``                ``}``            ``}``        ``}` `        ``// If no pair is present``        ``// with gcd is ≤ X``        ``return` `false``;``    ``}` `    ``// Function to check if all array elements are≤ X``    ``public` `static` `boolean` `check(``int``[] A, ``int` `X)``    ``{``        ``for` `(``int` `i = ``0``; i < A.length; i++) {``            ``if` `(A[i] > X) {``                ``return` `false``;``            ``}``        ``}``        ``return` `true``;``    ``}` `    ``// Function to calculate gcd of two numbers``    ``public` `static` `int` `gcd(``int` `a, ``int` `b)``    ``{``        ``if` `(b == ``0``)``            ``return` `a;``        ``return` `gcd(b, a % b);``    ``}` `    ``// Driver Code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `X = ``4``;``        ``int``[] A = { ``2``, ``1``, ``5``, ``3``, ``6` `};``        ``int` `N = ``5``;` `        ``System.out.println(findAns(A, N, X));``    ``}``}`

## Python3

 `# Python3 program to implement``# the above approach` `# Function to check if all array elements``# can be reduced to less than X or not``def` `findAns(A, N, X):``  ` `  ``# Checks if all array elements``  ``# are already ≤ X or not``  ``if` `(check(A, X)):``    ``return` `True``        ` `  ``# Traverse every possible pair``  ``for` `i ``in` `range``(N):``    ``for` `j ``in` `range``(i ``+` `1``, N):``      ` `      ``# Calculate GCD of two``      ``# array elements``      ``gcd ``=` `GCD(A[i], A[j])` `      ``# If gcd is ≠ 1``      ``if` `(gcd !``=` `1``):``        ` `        ``# If gcd is ≤ X, then a pair``        ``# is present to reduce all``        ``# array elements to ≤ X``        ``if` `(gcd <``=` `X):``          ``return` `True` `  ``# If no pair is present``  ``# with gcd is ≤ X``  ``return` `False` `# Function to check if all array elements are≤ X``def` `check(A, X):``  ``for` `i ``in` `range``(``len``(A)):``    ``if` `(A[i] > X):``      ``return` `False``  ``return` `True` `# Function to calculate gcd of two numbers``def` `GCD(a, b):``  ``if` `(b ``=``=` `0``):``    ``return` `a``  ``return` `GCD(b, a ``%` `b)` `# Driver Code``X ``=` `4``A ``=` `[ ``2``, ``1``, ``5``, ``3``, ``6` `]``N ``=` `5` `print``(findAns(A, N, X))` `# This code is contributed by rohitsingh07052`

## C#

 `// C# Program to implement``// the above approach``using` `System;``class` `GFG {` `    ``// Function to check if all array elements``    ``// can be reduced to less than X or not``    ``public` `static` `bool` `findAns(``        ``int``[] A, ``int` `N, ``int` `X)``    ``{``        ``// Checks if all array elements``        ``// are already ≤ X or not``        ``if` `(check(A, X))``        ``{``            ``return` `true``;``        ``}` `        ``// Traverse every possible pair``        ``for` `(``int` `i = 0; i < N; i++)``        ``{``            ``for` `(``int` `j = i + 1; j < N; j++)``            ``{` `                ``// Calculate GCD of two``                ``// array elements``                ``int` `gcd = gcdFoo(A[i], A[j]);` `                ``// If gcd is ≠ 1``                ``if` `(gcd != 1)``                ``{` `                    ``// If gcd is ≤ X, then a pair``                    ``// is present to reduce all``                    ``// array elements to ≤ X``                    ``if` `(gcd <= X)``                    ``{``                        ``return` `true``;``                    ``}``                ``}``            ``}``        ``}` `        ``// If no pair is present``        ``// with gcd is ≤ X``        ``return` `false``;``    ``}` `    ``// Function to check if all array elements are≤ X``    ``public` `static` `bool` `check(``int``[] A, ``int` `X)``    ``{``        ``for` `(``int` `i = 0; i < A.Length; i++)``        ``{``            ``if` `(A[i] > X)``            ``{``                ``return` `false``;``            ``}``        ``}``        ``return` `true``;``    ``}` `    ``// Function to calculate gcd of two numbers``    ``static` `int` `gcdFoo(``int` `a, ``int` `b)``    ``{``        ``if` `(b == 0)``            ``return` `a;``        ``return` `gcdFoo(b, a % b);``    ``}` `    ``// Driver Code``    ``public` `static` `void` `Main(String[] args)``    ``{``        ``int` `X = 4;``        ``int``[] A = { 2, 1, 5, 3, 6 };``        ``int` `N = 5;` `        ``Console.WriteLine(findAns(A, N, X));``    ``}``}` `// This code is contributed by 29AjayKumar`

## Javascript

 ``

Output

`true`

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

My Personal Notes arrow_drop_up