# Find the value of P and modular inverse of Q modulo 998244353

Given two integer P and Q, the task is to find the value of P and modular inverse of Q modulo 998244353. That is Note: P and Q are co-prime integers
Examples:

Input: P = 1, Q = 4
Output: 748683265
Explanation:
Refer below for the explanation of the example.

Input: P = 1, Q = 16
Output: 935854081

Approach:  The key observation in the problem is that Q is co-prime with the 998244353, Then Q-1 always exists which can be computed using Extended euclidean Algorithm

For Example:

For P = 1 and Q = 4
We know that, That is, 4 * 748683265 = 2994733060 equivalent to 1 mod 998244353
Therefore,  1*4^(-1) = 748683265

Below is the implementation of the above approach:

## C++

 // C++ implementation to find the  // value of P.Q -1 mod 998244353    #include  using namespace std;    // Function to find the value of  // P * Q^-1 mod 998244353  long long calculate(long long p,                      long long q)  {      long long mod = 998244353, expo;      expo = mod - 2;        // Loop to find the value      // until the expo is not zero      while (expo) {            // Multiply p with q          // if expo is odd          if (expo & 1) {              p = (p * q) % mod;          }          q = (q * q) % mod;            // Reduce the value of          // expo by 2          expo >>= 1;      }      return p;  }    // Driver code  int main()  {      int p = 1, q = 4;        // Function Call      cout << calculate(p, q) << '\n';      return 0;  }

## Java

 // Java implementation to find the  // value of P.Q -1 mod 998244353  import java.util.*;   class GFG{   // Function to find the value of // P * Q^-1 mod 998244353 static long calculate(long p, long q) {     long mod = 998244353, expo;     expo = mod - 2;       // Loop to find the value     // until the expo is not zero     while (expo != 0)     {           // Multiply p with q         // if expo is odd         if ((expo & 1) == 1)         {             p = (p * q) % mod;         }         q = (q * q) % mod;           // Reduce the value of         // expo by 2         expo >>= 1;     }     return p; }   // Driver code public static void main(String[] args) {     long p = 1, q = 4;           // Function call     System.out.println(calculate(p, q)); } }   // This code is contributed by offbeat

## Python3

 # Python3 implementation to find the  # value of P.Q -1 mod 998244353    # Function to find the value of  # P * Q^-1 mod 998244353  def calculate(p, q):            mod = 998244353     expo = 0     expo = mod - 2       # Loop to find the value      # until the expo is not zero      while (expo):            # Multiply p with q          # if expo is odd          if (expo & 1):              p = (p * q) % mod          q = (q * q) % mod            # Reduce the value of          # expo by 2          expo >>= 1       return p    # Driver code  if __name__ == '__main__':            p = 1     q = 4       # Function call      print(calculate(p, q))    # This code is contributed by mohit kumar 29

## C#

 // C# implementation to find the  // value of P.Q -1 mod 998244353  using System; class GFG{    // Function to find the value of // P * Q^-1 mod 998244353 static long calculate(long p, long q) {     long mod = 998244353, expo;     expo = mod - 2;        // Loop to find the value     // until the expo is not zero     while (expo != 0)     {            // Multiply p with q         // if expo is odd         if ((expo & 1) == 1)         {             p = (p * q) % mod;         }         q = (q * q) % mod;            // Reduce the value of         // expo by 2         expo >>= 1;     }     return p; }    // Driver code public static void Main(string[] args) {     long p = 1, q = 4;            // Function call     Console.WriteLine(calculate(p, q)); } }    // This code is contributed by Ritik Bansal

Output

748683265 My Personal Notes arrow_drop_up 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.