Skip to content
Related Articles
Largest number less than or equal to N/2 which is coprime to N
• Last Updated : 20 May, 2021

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`

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`

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes

My Personal Notes arrow_drop_up