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

• Last Updated : 23 Jun, 2022

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```

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

 `

## Javascript

 `// Javascript implementation of the above approach` `// Function to calculate gcd of two number``function` `gcd(a, b)``{``    ``if` `(b == 0)``        ``return` `a;``    ``else``        ``return` `gcd(b, a % b);``}` `// Function to check if two numbers``// are coprime or not``function` `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``function` `largestCoprime(N)``{``    ``let half = Math.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``let n = 50;``document.write(largestCoprime(n));` `// This code is contributed``// by gfgking`

Output:

`23`

Time Complexity : O(nlogn)

Auxiliary Space: O(logn)

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

 ``

## Javascript

 ``

Output:

`23`

Time Complexity : O(1), since there are only basic arithmetic operations that take constant time.

Auxiliary Space: O(1), since no extra space has been required.

My Personal Notes arrow_drop_up