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
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 <bits/stdc++.h>#define ll long long intusing namespace std;// Function to calculate gcd of two numberll 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 notbool 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 Nll 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 codeint main(){ ll n = 50; cout << largestCoprime(n); return 0;} |
Java
// Java implementation of the above approacdhimport java.util.*;class GFG{// Function to calculate gcd of two numberstatic 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 notstatic 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 Nstatic 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 codepublic 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 approacdhimport math as mt# Function to calculate gcd of two numberdef gcd( a, b): if (b == 0): return a else: return gcd(b, a % b)# Function to check if two numbers are coprime or notdef 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 Ndef 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 coden = 50print( largestCoprime(n))#This code is contributed by Mohit kumar 29 |
C#
// C# implementation of the above approacdhusing System;class GFG{// Function to calculate gcd of two numberstatic 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 notstatic 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 Nstatic 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 codestatic void Main(){ int n = 50; Console.WriteLine(largestCoprime(n));}}// This code is contributed by chandan_jnu |
PHP
<?php// PHP implementation of the above approach// Function to calculate gcd of two numberfunction gcd($a, $b){ if ($b == 0) return $a; else return gcd($b, $a % $b);}// Function to check if two numbers // are coprime or notfunction 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 Nfunction largestCoprime($N){ $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$n = 50;echo largestCoprime($n);// This code is contributed // by Akanksha Rai |
Javascript
// Javascript implementation of the above approach// Function to calculate gcd of two numberfunction gcd(a, b){ if (b == 0) return a; else return gcd(b, a % b);}// Function to check if two numbers// are coprime or notfunction 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 Nfunction 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 codelet n = 50;document.write(largestCoprime(n));// This code is contributed// by gfgking |
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 <bits/stdc++.h>using namespace std;// Function to find largest integer less than// or equal to N/2 and is coprime with Nlong 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 codeint 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
<?php// PHP implementation of the above approach// Function to find largest integer less than// or equal to N/2 and is coprime with Nfunction largestCoprime($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$n = 50;echo largestCoprime($n);// This code is contributed by// chandan_jnu?> |
Javascript
<script>// Javascript implementation of the approach// Function to find largest integer less than // or equal to N/2 and is coprime with N function largestCoprime(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 var n = 50; document.write(largestCoprime(n));// This code is contributed by Khushboogoyal499 </script> |
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.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



