# Nearest smaller number to N having multiplicative inverse under modulo N equal to that number

• Last Updated : 13 Apr, 2021

Given a prime number N, the task is to find the closest smaller number than N such that modulo multiplicative inverse of a number under modulo N is equal to the number itself.

Examples:

Input: N = 7
Output: 6
Explanation:
Modulo multiplicative inverse of all possible natural numbers from 1 to less than N are:
Modulo multiplicative inverse of 1 under modulo N(=7) is 1.
Modulo multiplicative inverse of 2 under modulo N(=7) is 4.
Modulo multiplicative inverse of 3 under modulo N(=7) is 5.
Modulo multiplicative inverse of 4 under modulo N(=7) is 2.
Modulo multiplicative inverse of 5 under modulo N(=7) is 3.
Modulo multiplicative inverse of 6 under modulo N(=7) is 6.
Therefore, the nearest smaller number to N(= 7) having modulo inverse equal to the number itself is 6.

Input: N = 11
Output: 10

Naive Approach: The simplest approach to solve this problem is to traverse all natural numbers from 1 to N and find the largest number such that modulo multiplicative inverse of the number under modulo N is equal to the number itself.

Time Complexity: O(N * log N)
Auxiliary Space: O(1)

Efficient Approach: To optimize the above approach the idea is based on the following observations:

The nearest smaller number to N having modulo multiplicative inverse equal to the number itself is (N – 1).

Mathematical proof:
If X and Y are two numbers such that (X * Y) % N = 1 mod(N), then Y is modulo inverse of X.
Put X = N – 1 then
=>((N – 1) * Y) % N = 1 mod(N)
=>(N Ã— Y) % N – Y % N = 1 mod(N)
=> Y = N – 1
Therefore, for X = N – 1 the value of Y is equal to X.

Therefore, to solve the problem, simply print N – 1 as the required answer.

Below is the implementation of the above approach:

## C++

 `// C++ program to implement` `// the above approach`   `#include ` `using` `namespace` `std;`   `// Function to find the nearest` `// smaller number satisfying` `// the condition` `int` `clstNum(``int` `N)` `{` `    ``return` `(N - 1);` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `N = 11;` `    ``cout << clstNum(N);` `}`

## Java

 `// Java program to implement` `// the above approach` `import` `java.io.*;`   `class` `GFG{`   `// Function to find the nearest` `// smaller number satisfying` `// the condition` `static` `int` `clstNum(``int` `N){ ``return` `(N - ``1``); }`   `// Driver Code` `public` `static` `void` `main(String[] args)` `{` `    ``int` `N = ``11``;` `    `  `    ``System.out.println(clstNum(N));` `}` `}`   `// This code is contributed by akhilsaini`

## Python3

 `# Python3 program to implement` `# the above approach`   `# Function to find the nearest` `# smaller number satisfying` `# the condition` `def` `clstNum(N):` `  ``return` `(N ``-` `1``)`   `# Driver Code` `if` `__name__ ``=``=` `'__main__'``:` `  `  `  ``N ``=` `11` `  `  `  ``print``(clstNum(N))` `    `  `# This code is contributed by akhilsaini`

## C#

 `// C# program to implement` `// the above approach` `using` `System;`   `class` `GFG{`   `// Function to find the nearest` `// smaller number satisfying` `// the condition` `static` `int` `clstNum(``int` `N){ ``return` `(N - 1); }`   `// Driver Code` `public` `static` `void` `Main()` `{` `    ``int` `N = 11;` `    `  `    ``Console.Write(clstNum(N));` `}` `}`   `// This code is contributed by akhilsaini`

## Javascript

 ``

Output:

`10`

Time Complexity: O(1)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Recommended Articles
Page :