# Expressing a fraction as a natural number under modulo ‘m’

Given two integers A and B where A is not divisible by B, the task is to express A / B as a natural number modulo m where m = 1000000007.
Note: This representation is useful where we need to express Probability of an event, Area of Curves and polygons etc.

Examples:

Input: A = 2, B = 6
Output: 333333336

Input: A = 4, B = 5
Output: 600000005

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

Approach: We know that, A / B can be written as A * (1 / B) i.e. A * (B ^ -1).

It is known that the modulo(%) operator satisfies the relation:

`(a * b) % m = ( (a % m) * (b % m) ) % m`

So, we can write:

`(b ^ -1) % m = (b ^ m-2) % m (Fermat's little theorem)`

Therefore the result will be:

`( (A mod m) * ( power(B, m-2) % m) ) % m`

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach ` `#include ` `using` `namespace` `std; ` `#define ll long long int ` `#define m 1000000007 ` ` `  `// Function to return the GCD of given numbers ` `int` `gcd(``int` `a, ``int` `b) ` `{ ` `    ``if` `(a == 0) ` `        ``return` `b; ` `    ``return` `gcd(b % a, a); ` `} ` ` `  `// Recursive function to return (x ^ n) % m ` `ll modexp(ll x, ll n) ` `{ ` `    ``if` `(n == 0) { ` `        ``return` `1; ` `    ``} ` `    ``else` `if` `(n % 2 == 0) { ` `        ``return` `modexp((x * x) % m, n / 2); ` `    ``} ` `    ``else` `{ ` `        ``return` `(x * modexp((x * x) % m, (n - 1) / 2) % m); ` `    ``} ` `} ` ` `  `// Function to return the fraction modulo mod ` `ll getFractionModulo(ll a, ll b) ` `{ ` `    ``ll c = gcd(a, b); ` ` `  `    ``a = a / c; ` `    ``b = b / c; ` ` `  `    ``// (b ^ m-2) % m ` `    ``ll d = modexp(b, m - 2); ` ` `  `    ``// Final answer ` `    ``ll ans = ((a % m) * (d % m)) % m; ` ` `  `    ``return` `ans; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``ll a = 2, b = 6; ` ` `  `    ``cout << getFractionModulo(a, b) << endl; ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation of the approach ` ` `  `import` `java.io.*; ` ` `  `class` `GFG { ` `     `  ` `  ` `  `static` `long` `m  = ``1000000007``; ` ` `  `// Function to return the GCD of given numbers ` ` ``static` `long` `gcd(``long` `a, ``long` `b) ` `{ ` `    ``if` `(a == ``0``) ` `        ``return` `b; ` `    ``return` `gcd(b % a, a); ` `} ` ` `  `// Recursive function to return (x ^ n) % m ` `static` `long` `modexp(``long` `x, ``long` `n) ` `{ ` `    ``if` `(n == ``0``) { ` `        ``return` `1``; ` `    ``} ` `    ``else` `if` `(n % ``2` `== ``0``) { ` `        ``return` `modexp((x * x) % m, n / ``2``); ` `    ``} ` `    ``else` `{ ` `        ``return` `(x * modexp((x * x) % m, (n - ``1``) / ``2``) % m); ` `    ``} ` `} ` ` `  `// Function to return the fraction modulo mod ` ` ``static` `long` `getFractionModulo(``long` `a, ``long` `b) ` `{ ` `    ``long` `c = gcd(a, b); ` ` `  `    ``a = a / c; ` `    ``b = b / c; ` ` `  `    ``// (b ^ m-2) % m ` `    ``long`  `d = modexp(b, m - ``2``); ` ` `  `    ``// Final answer ` `    ``long` `ans = ((a % m) * (d % m)) % m; ` ` `  `    ``return` `ans; ` `} ` ` `  `// Driver code ` ` `  `    ``public` `static` `void` `main (String[] args) { ` `        ``long` `a = ``2``, b = ``6``; ` ` `  `    ``System.out.println(getFractionModulo(a, b)); ` `    ``} ` `} ` `// This code is contributed by inder_verma `

## Python3

# Python3 implementation of the approach
m = 1000000007

# Function to return the GCD
# of given numbers
def gcd(a, b):

if (a == 0):
return b
return gcd(b % a, a)

# Recursive function to return (x ^ n) % m
def modexp(x, n):

if (n == 0) :
return 1

elif (n % 2 == 0) :
return modexp((x * x) % m, n // 2)

else :
return (x * modexp((x * x) % m,
(n – 1) / 2) % m)

# Function to return the fraction modulo mod
def getFractionModulo(a, b):

c = gcd(a, b)

a = a // c
b = b // c

# (b ^ m-2) % m
d = modexp(b, m – 2)

ans = ((a % m) * (d % m)) % m

return ans

# Driver code
if __name__ == “__main__”:

a = 2
b = 6

print ( getFractionModulo(a, b))

# This code is contributed by ita_c

## C#

 `//C#  implementation of the approach ` ` `  `using` `System; ` ` `  `public` `class` `GFG{ ` `     `  ` `  `static` `long` `m = 1000000007; ` ` `  `// Function to return the GCD of given numbers ` `static` `long` `gcd(``long` `a, ``long` `b) ` `{ ` `    ``if` `(a == 0) ` `        ``return` `b; ` `    ``return` `gcd(b % a, a); ` `} ` ` `  `// Recursive function to return (x ^ n) % m ` `static` `long` `modexp(``long` `x, ``long` `n) ` `{ ` `    ``if` `(n == 0) { ` `        ``return` `1; ` `    ``} ` `    ``else` `if` `(n % 2 == 0) { ` `        ``return` `modexp((x * x) % m, n / 2); ` `    ``} ` `    ``else` `{ ` `        ``return` `(x * modexp((x * x) % m, (n - 1) / 2) % m); ` `    ``} ` `} ` ` `  `// Function to return the fraction modulo mod ` `static` `long` `getFractionModulo(``long` `a, ``long` `b) ` `{ ` `    ``long` `c = gcd(a, b); ` ` `  `    ``a = a / c; ` `    ``b = b / c; ` ` `  `    ``// (b ^ m-2) % m ` `    ``long` `d = modexp(b, m - 2); ` ` `  `    ``// Final answer ` `    ``long` `ans = ((a % m) * (d % m)) % m; ` ` `  `    ``return` `ans; ` `} ` ` `  `// Driver code ` `     `  `    ``static` `public` `void` `Main (){ ` `         `  `        ``long` `a = 2, b = 6; ` `        ``Console.WriteLine(getFractionModulo(a, b)); ` `    ``} ` `} `

## PHP

 ` `

Output:

```333333336
```

My Personal Notes arrow_drop_up

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.