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

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`

Output:

```10

```

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

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 Active and well versed member of Competitive Programming

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.

Improved By : akhilsaini