Related Articles
Check if there exists a prime number which gives Y after being repeatedly subtracted from X
• Difficulty Level : Hard
• Last Updated : 24 Dec, 2019

Given two integers X and Y where X > Y, the task is to check if there exists an prime number P such that if P is repeatedly subtracted from X then it gives Y.

Examples:

Input: X = 100, Y = 98
Output: Yes
(100 – (2 * 1) = 98)

Input: X = 45, Y = 31
Output: Yes
(45 – (7 * 2)) = 31

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Naive approach: Run a loop for every integer starting from 2 to x. If the current number is a prime number and it meets the criteria given in the question, then it is the required number.

Efficient approach: Notice that for a valid prime p, x – k * p = y or x – y = k * p. Suppose, p = 2 then (x – y) = 2, 4, 6, … (all even numbers). This means if (x – y) is even then the answer is always true. If (x – y) is an odd number other than 1, it will always have a prime factor. Either it itself is a prime or it is a product of a smaller prime and some other integers. So the answer is True for all odd numbers other than 1.
What if (x – y) = 1, it is neither a prime nor composite. So this is the only case where the answer is false.

Below is the implementation of the approach:

## C++

 // C++ implementation of the approach #include using namespace std;    // Function that returns true if any // prime number satisfies // the given conditions bool isPossible(int x, int y) {        // No such prime exists     if ((x - y) == 1)         return false;        return true; }    // Driver code int main() {     int x = 100, y = 98;        if (isPossible(x, y))         cout << "Yes";     else         cout << "No";        return 0; }

## Java

 // Java implementation of the approach import java.util.*;    class GFG {    // Function that returns true if any // prime number satisfies // the given conditions static boolean isPossible(int x, int y) {        // No such prime exists     if ((x - y) == 1)         return false;        return true; }    // Driver code public static void main(String[] args) {     int x = 100, y = 98;        if (isPossible(x, y))         System.out.print("Yes");     else         System.out.print("No"); } }    // This code is contributed by Rajput-Ji

## Python3

 # Python3 implementation of the approach    # Function that returns true if any # prime number satisfies # the given conditions def isPossible(x, y):        # No such prime exists     if ((x - y) == 1):         return False        return True    # Driver code x = 100 y = 98    if (isPossible(x, y)):     print("Yes") else:     print("No")    # This code is contributed by Mohit Kumar

## C#

 // C# implementation of the approach using System;    class GFG {    // Function that returns true if any // prime number satisfies // the given conditions static bool isPossible(int x, int y) {        // No such prime exists     if ((x - y) == 1)         return false;        return true; }    // Driver code public static void Main(String[] args) {     int x = 100, y = 98;        if (isPossible(x, y))         Console.Write("Yes");     else         Console.Write("No"); } }    // This code is contributed by 29AjayKumar

Output:

Yes

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.

My Personal Notes arrow_drop_up
Recommended Articles
Page :