Check if there exists a prime number which gives Y after being repeatedly subtracted from X

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

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <bits/stdc++.h>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


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 Posts:


Check out this Author's contributed articles.

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 Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.