# Check if sum Y can be obtained from the Array by the given operations

• Last Updated : 30 Apr, 2021

Given an array of integers arr[] and two integers X and Y, the task is to check if it is possible to obtain a sequence having sum X such that the sum of each element of the subsequence multiplied by an array element is equal to Y
Note: Here X is always less than Y.

Examples:

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

Input: arr[] = {1, 2, 7, 9, 10}, X = 11, Y = 13
Output: Yes
Explanation:
The given value of X( = 11) can be split into a sequence {9, 2} such that 9 * 1(= arr + 2 * 2(= arr) = 13( = Y)
Input: arr[] ={1, 3, 5, 7}, X = 27, Y = 34
Output: No

Approach: Follow the steps below in order to solve the problem:

• Calculate the difference between Y and X.
• For every array element arr[i], which is > 1, update (Y – X) % (arr[i] – 1).
• If the difference is reduced 0, print “Yes“. Otherwise, print “No”.

Below is the implementation of the above approach:

## C++

 `// C++ Program to implement``// the above approach``#include ``using` `namespace` `std;` `// Function to check if it is possible``// to obtain sum Y from a sequence of``// sum X from the array arr[]``void` `solve(``int` `arr[], ``int` `n, ``int` `X, ``int` `Y)``{` `    ``// Store the difference``    ``int` `diff = Y - X;` `    ``// Iterate over the array``    ``for` `(``int` `i = 0; i < n; i++) {` `        ``if` `(arr[i] != 1) {``            ``diff = diff % (arr[i] - 1);``        ``}``    ``}` `    ``// If diff reduced to 0``    ``if` `(diff == 0)``        ``cout << ``"Yes"``;``    ``else``        ``cout << ``"No"``;``}` `// Driver Code``int` `main()``{``    ``int` `arr[] = { 1, 2, 7, 9, 10 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr);``    ``int` `X = 11, Y = 13;``    ``solve(arr, n, X, Y);` `    ``return` `0;``}`

## Java

 `// Java program to implement``// the above approach``class` `GFG{``    ` `// Function to check if it is possible``// to obtain sum Y from a sequence of``// sum X from the array arr[]``static` `void` `solve(``int` `arr[], ``int` `n,``                  ``int` `X, ``int` `Y)``{``    ` `    ``// Store the difference``    ``int` `diff = Y - X;` `    ``// Iterate over the array``    ``for``(``int` `i = ``0``; i < n; i++)``    ``{``        ``if` `(arr[i] != ``1``)``        ``{``            ``diff = diff % (arr[i] - ``1``);``        ``}``    ``}` `    ``// If diff reduced to 0``    ``if` `(diff == ``0``)``        ``System.out.print( ``"Yes"``);``    ``else``        ``System.out.print(``"No"``);``}` `// Driver Code``public` `static` `void` `main (String []args)``{``    ``int` `arr[] = { ``1``, ``2``, ``7``, ``9``, ``10` `};``    ``int` `n = arr.length;``    ``int` `X = ``11``, Y = ``13``;``    ` `    ``solve(arr, n, X, Y);``}``}` `// This code is contributed by chitranayal`

## Python3

 `# Python3 program to implement``# the above approach` `# Function to check if it is possible``# to obtain sum Y from a sequence of``# sum X from the array arr[]``def` `solve(arr, n, X, Y):` `    ``# Store the difference``    ``diff ``=` `Y ``-` `X` `    ``# Iterate over the array``    ``for` `i ``in` `range``(n):``        ``if``(arr[i] !``=` `1``):``            ``diff ``=` `diff ``%` `(arr[i] ``-` `1``)` `    ``# If diff reduced to 0``    ``if``(diff ``=``=` `0``):``        ``print``(``"Yes"``)``    ``else``:``        ``print``(``"No"``)` `# Driver Code``arr ``=` `[ ``1``, ``2``, ``7``, ``9``, ``10` `]``n ``=` `len``(arr)``X, Y ``=` `11``, ``13` `# Function call``solve(arr, n, X, Y)` `# This code is contributed by Shivam Singh`

## C#

 `// C# program to implement``// the above approach``using` `System;` `class` `GFG{``    ` `// Function to check if it is possible``// to obtain sum Y from a sequence of``// sum X from the array []arr``static` `void` `solve(``int` `[]arr, ``int` `n,``                  ``int` `X, ``int` `Y)``{``    ` `    ``// Store the difference``    ``int` `diff = Y - X;` `    ``// Iterate over the array``    ``for``(``int` `i = 0; i < n; i++)``    ``{``        ``if` `(arr[i] != 1)``        ``{``            ``diff = diff % (arr[i] - 1);``        ``}``    ``}` `    ``// If diff reduced to 0``    ``if` `(diff == 0)``        ``Console.Write(``"Yes"``);``    ``else``        ``Console.Write(``"No"``);``}` `// Driver Code``public` `static` `void` `Main(String []args)``{``    ``int` `[]arr = { 1, 2, 7, 9, 10 };``    ``int` `n = arr.Length;``    ``int` `X = 11, Y = 13;``    ` `    ``solve(arr, n, X, Y);``}``}` `// This code is contributed by Amit Katiyar`

## Javascript

 ``
Output:
`Yes`

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

My Personal Notes arrow_drop_up