Skip to content
Related Articles
Find the value of P and modular inverse of Q modulo 998244353
• Difficulty Level : Hard
• Last Updated : 03 Aug, 2020

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 998244353long 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 codeint 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 998244353import java.util.*; class GFG{ // Function to find the value of// P * Q^-1 mod 998244353static 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 codepublic 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 998244353def 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 codeif __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 998244353using System;class GFG{  // Function to find the value of// P * Q^-1 mod 998244353static 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 codepublic 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



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.

My Personal Notes arrow_drop_up