# 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

Check out this Author's contributed articles.

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.