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++ implementation of the above approacdh #include <bits/stdc++.h> #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 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 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# 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 // PHP 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 )
{ $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 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 |
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++ 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 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 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 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# 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 implementation of the above 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 $n = 50;
echo largestCoprime( $n );
// This code is contributed by // chandan_jnu ?> |
<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.