# Largest number less than or equal to N/2 which is coprime to N

Given a number N, the task is to find the largest positive integer less than or equal to N/2 which is coprime to N.
Note: Two number A and B are considered to coprime if gcd(A, B) = 1. It is also given that 2 < N < 10^18.

Examples:

```Input: N = 50
Output: 23
GCD(50, 23) = 1

Input: N = 100
Output: 49
```

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

Naive Approach: Start from N/2 and find the number smaller than or equal to N/2 which is coprime to N.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the above approacdh ` `#include ` `#define ll long long int ` `using` `namespace` `std; ` ` `  `// Function to calculate gcd of two number ` `ll gcd(ll a, ll b) ` `{ ` `    ``if` `(b == 0) ` `        ``return` `a; ` `    ``else` `        ``return` `gcd(b, a % b); ` `} ` ` `  `// Function to check if two numbers are coprime or not ` `bool` `coPrime(ll n1, ll n2) ` `{ ` `    ``// two numbers are coprime if their gcd is 1 ` `    ``if` `(gcd(n1, n2) == 1) ` `        ``return` `true``; ` `    ``else` `        ``return` `false``; ` `} ` ` `  `// Function to find largest integer less ` `// than or equal to N/2 and coprime with N ` `ll largestCoprime(ll N) ` `{ ` `    ``ll half = ``floor``(N / 2); ` ` `  `    ``// Check one by one all numbers ` `    ``// less than or equal to N/2 ` `    ``while` `(coPrime(N, half) == ``false``) ` `        ``half--; ` ` `  `    ``return` `half; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` ` `  `    ``ll n = 50; ` `    ``cout << largestCoprime(n); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation of the above approacdh ` `import` `java.util.*; ` ` `  `class` `GFG ` `{ ` ` `  `// Function to calculate gcd of two number ` `static` `int` `gcd(``int` `a, ``int` `b) ` `{ ` `    ``if` `(b == ``0``) ` `        ``return` `a; ` `    ``else` `        ``return` `gcd(b, a % b); ` `} ` ` `  `// Function to check if two  ` `// numbers are coprime or not ` `static` `boolean` `coPrime(``int` `n1, ``int` `n2) ` `{ ` `    ``// two numbers are coprime ` `    ``// if their gcd is 1 ` `    ``if` `(gcd(n1, n2) == ``1``) ` `        ``return` `true``; ` `    ``else` `        ``return` `false``; ` `} ` ` `  `// Function to find largest integer less ` `// than or equal to N/2 and coprime with N ` `static` `int` `largestCoprime(``int` `N) ` `{ ` `    ``int` `half = (``int``)(N / ``2``); ` ` `  `    ``// Check one by one all numbers ` `    ``// less than or equal to N/2 ` `    ``while` `(coPrime(N, half) == ``false``) ` `        ``half--; ` ` `  `    ``return` `half; ` `} ` ` `  `// Driver code ` `public` `static` `void` `main(String args[]) ` `{ ` `    ``int` `n = ``50``; ` `    ``System.out.println(largestCoprime(n)); ` `} ` `} ` ` `  `// This code is contributed by ` `// Surendra_Gangwar `

## Python3

 `# Python3 implementation of the above approacdh ` `import` `math as mt ` ` `  `# Function to calculate gcd of two number ` `def` `gcd( a, b): ` ` `  `    ``if` `(b ``=``=` `0``): ` `        ``return` `a ` `    ``else``: ` `        ``return` `gcd(b, a ``%` `b) ` ` `  ` `  `# Function to check if two numbers are coprime or not ` `def` `coPrime( n1, n2): ` ` `  `    ``# two numbers are coprime if their gcd is 1 ` `    ``if` `(gcd(n1, n2) ``=``=` `1``): ` `        ``return` `True` `    ``else``: ` `        ``return` `False` ` `  ` `  `# Function to find largest integer less ` `# than or equal to N/2 and coprime with N ` `def` `largestCoprime( N): ` ` `  `    ``half ``=` `mt.floor(N ``/` `2``) ` ` `  `    ``# Check one by one a numbers ` `    ``# less than or equal to N/2 ` `    ``while` `(coPrime(N, half) ``=``=` `False``): ` `        ``half ``-``=` `1` ` `  `    ``return` `half ` ` `  ` `  `# Driver code ` ` `  `n ``=` `50` `print``( largestCoprime(n)) ` ` `  `#This code is contributed by Mohit kumar 29 `

## C#

 `// C# implementation of the above approacdh ` `using` `System; ` ` `  `class` `GFG ` `{ ` ` `  `// Function to calculate gcd of two number ` `static` `int` `gcd(``int` `a, ``int` `b) ` `{ ` `    ``if` `(b == 0) ` `        ``return` `a; ` `    ``else` `        ``return` `gcd(b, a % b); ` `} ` ` `  `// Function to check if two  ` `// numbers are coprime or not ` `static` `bool` `coPrime(``int` `n1, ``int` `n2) ` `{ ` `    ``// two numbers are coprime ` `    ``// if their gcd is 1 ` `    ``if` `(gcd(n1, n2) == 1) ` `        ``return` `true``; ` `    ``else` `        ``return` `false``; ` `} ` ` `  `// Function to find largest integer less ` `// than or equal to N/2 and coprime with N ` `static` `int` `largestCoprime(``int` `N) ` `{ ` `    ``int` `half = (``int``)(N / 2); ` ` `  `    ``// Check one by one all numbers ` `    ``// less than or equal to N/2 ` `    ``while` `(coPrime(N, half) == ``false``) ` `        ``half--; ` ` `  `    ``return` `half; ` `} ` ` `  `// Driver code ` `static` `void` `Main() ` `{ ` `    ``int` `n = 50; ` `    ``Console.WriteLine(largestCoprime(n)); ` `} ` `} ` ` `  `// This code is contributed by chandan_jnu `

## PHP

Output:

```23
```

Efficient Approach: To observe the pattern:

• If the given number is odd, the largest coprime number will be (N-1)/2.
• If the given number is divisible by 4, the largest coprime number will be (N)/2 – 1.
• If the given number is divisible by 2, the largest coprime number will be (N)/2 – 2.

Note: There is a special case 6, for which greatest coprime number less than N / 2 will be 1.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the above approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to find largest integer less than ` `// or equal to N/2 and is coprime with N ` `long` `long` `largestCoprime(``long` `long` `N) ` `{ ` `    ``// Handle the case for N = 6 ` `    ``if` `(N == 6) ` `        ``return` `1; ` ` `  `    ``else` `if` `(N % 4 == 0) ` `        ``return` `(N / 2) - 1; ` ` `  `    ``else` `if` `(N % 2 == 0) ` `        ``return` `(N / 2) - 2; ` ` `  `    ``else` `        ``return` `((N - 1) / 2); ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` ` `  `    ``long` `long` `int` `n = 50; ` `    ``cout << largestCoprime(n) << endl; ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation of the above approach  ` `class` `GfG ` `{ ` ` `  `    ``// Function to find largest integer less than  ` `    ``// or equal to N/2 and is coprime with N  ` `    ``static` `int` `largestCoprime(``int` `N)  ` `    ``{  ` `         `  `        ``// Handle the case for N = 6  ` `        ``if` `(N == ``6``)  ` `            ``return` `1``;  ` `     `  `        ``else` `if` `(N % ``4` `== ``0``)  ` `            ``return` `(N / ``2``) - ``1``;  ` `     `  `        ``else` `if` `(N % ``2` `== ``0``)  ` `            ``return` `(N / ``2``) - ``2``;  ` `     `  `        ``else` `            ``return` `((N - ``1``) / ``2``);  ` `    ``}  ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String []args) ` `    ``{ ` `        ``int` `n = ``50``;  ` `        ``System.out.println(largestCoprime(n)); ` `    ``} ` `} ` `     `  `// This code is contributed by Rituraj Jain `

## Python3

 `# Python3 implementation of the above approach  ` ` `  `# Function to find largest integer less than  ` `# or equal to N/2 and is coprime with N  ` `def` `largestCoprime(N):  ` ` `  `    ``# Handle the case for N = 6  ` `    ``if` `N ``=``=` `6``:  ` `        ``return` `1`  `   `  `    ``elif` `N ``%` `4` `=``=` `0``: ` `        ``return` `N ``/``/` `2` `-` `1`  `   `  `    ``elif` `N ``%` `2` `=``=` `0``: ` `        ``return` `N ``/``/` `2` `-` `2`  `   `  `    ``else``: ` `        ``return` `(N ``-` `1``) ``/``/` `2`  ` `  `# Driver code  ` `if` `__name__ ``=``=` `"__main__"``:  ` `   `  `    ``n ``=` `50`  `    ``print``(largestCoprime(n)) ` `   `  `# This code is contributed by Rituraj Jain `

## C#

 `// C# implementation of the above approach  ` `using` `System; ` ` `  `class` `GfG  ` `{  ` ` `  `    ``// Function to find largest  ` `    ``// integer less than or equal  ` `    ``// to N/2 and is coprime with N  ` `    ``static` `int` `largestCoprime(``int` `N)  ` `    ``{  ` `         `  `        ``// Handle the case for N = 6  ` `        ``if` `(N == 6)  ` `            ``return` `1;  ` `     `  `        ``else` `if` `(N % 4 == 0)  ` `            ``return` `(N / 2) - 1;  ` `     `  `        ``else` `if` `(N % 2 == 0)  ` `            ``return` `(N / 2) - 2;  ` `     `  `        ``else` `            ``return` `((N - 1) / 2);  ` `    ``}  ` ` `  `    ``// Driver code  ` `    ``public` `static` `void` `Main()  ` `    ``{  ` `        ``int` `n = 50;  ` `        ``Console.WriteLine(largestCoprime(n));  ` `    ``}  ` `}  ` `     `  `// This code is contributed by Ryuga `

## PHP

 ` `

Output:

```23
```

My Personal Notes arrow_drop_up