Print all distinct Coprime sets possible from 1 to N
Given an integer N, the task is to find all distinct co-prime sets up to the given integer N such that an element doesn’t appear in more than a set.
A number a is said to be co-prime with b if GCD(a, b) = 1.
Examples:
Input: N = 5
Output: (1, 2) (3, 4, 5)Input: N = 6
Output: (1, 2) (3, 4) (5, 6)
Approach:
- To solve the problem mentioned above, we can observe that if N is less than 4 then all the elements are already co-prime till N because they will always have GCD as 1. Thus, for N = [1, 3], the possible coprime sets are (1), (1, 2) and (1, 2, 3) respectively.
- For all the values of N > 3, there are two possible cases:
- If the value of N is even, then every set will contain 2 adjacent elements up to N itself since adjacent numbers are always co-prime to each other.
- If the value for integer N is odd, then every set will contain 2 adjacent elements except the last set which will have the last three elements.
Below is the implementation of the above approach:
C++
// C++ implementation to print // all distinct co-prime sets // possible for numbers from 1 to N #include <bits/stdc++.h> using namespace std; // Function to print all coprime sets void coPrimeSet( int n) { int firstadj, secadj; // Check if n is less than 4 // then simply print all values till n if (n < 4) { cout << "( " ; for ( int i = 1; i <= n; i++) cout << i << ", " ; cout << ")\n" ; } // For all the values of n > 3 else { // Check if n is even // then every set will contain // 2 adjacent elements up-to n if (n % 2 == 0) { for ( int i = 0; i < n / 2; i++) { firstadj = 2 * i + 1; secadj = 2 * i + 2; cout << "(" << firstadj << ", " << secadj << ")\n" ; } } else { // if n is odd then every set will // contain 2 adjacent element // except the last set which // will have last three elements for ( int i = 0; i < n / 2 - 1; i++) { firstadj = 2 * i + 1; secadj = 2 * i + 2; cout << "(" << firstadj << ", " << secadj << ")\n" ; } // Last element for odd case cout << "(" << n - 2 << ", " << n - 1 << ", " << n << ")\n" ; } } } // Driver Code int main() { int n = 5; coPrimeSet(n); return 0; } |
Java
// Java implementation to print // all distinct co-prime sets // possible for numbers from 1 to N import java.util.*; class GFG{ // Function to print all co-prime sets static void coPrimeSet( int n) { int firstadj, secadj; // Check if n is less than 4 then // simply print all values till n if (n < 4 ) { System.out.print( "( " ); for ( int i = 1 ; i <= n; i++) System.out.print(i + ", " ); System.out.print( ")\n" ); } // For all the values of n > 3 else { // Check if n is even then // every set will contain // 2 adjacent elements up-to n if (n % 2 == 0 ) { for ( int i = 0 ; i < n / 2 ; i++) { firstadj = 2 * i + 1 ; secadj = 2 * i + 2 ; System.out.print( "(" + firstadj + ", " + secadj + ")\n" ); } } else { // If n is odd then every set will // contain 2 adjacent element // except the last set which // will have last three elements for ( int i = 0 ; i < n / 2 - 1 ; i++) { firstadj = 2 * i + 1 ; secadj = 2 * i + 2 ; System.out.print( "(" + firstadj + ", " + secadj + ")\n" ); } // Last element for odd case System.out.print( "(" + (n - 2 ) + ", " + ( n - 1 ) + ", " + n + ")\n" ); } } } // Driver code public static void main(String[] args) { int n = 5 ; coPrimeSet(n); } } // This code is contributed by sapnasingh4991 |
Python3
# Python3 implementation to print # all distinct co-prime sets # possible for numbers from 1 to N # Function to print all co-prime sets def coPrimeSet(n): firstadj = 0 ; secadj = 0 ; # Check if n is less than 4 then # simply print all values till n if (n < 4 ): print ( "( " ); for i in range ( 1 , n + 1 ): print (i + ", " ); print ( ")" ); # For all the values of n > 3 else : # Check if n is even then # every set will contain # 2 adjacent elements up-to n if (n % 2 = = 0 ): for i in range ( 0 , n / 2 ): firstadj = 2 * i + 1 ; secadj = 2 * i + 2 ; print ( "(" , firstadj, ", " , secadj, ")" ); else : # If n is odd then every set will # contain 2 adjacent element # except the last set which # will have last three elements for i in range ( 0 , int (n / 2 ) - 1 ): firstadj = 2 * i + 1 ; secadj = 2 * i + 2 ; print ( "(" , firstadj, ", " , secadj, ")" ); # Last element for odd case print ( "(" , (n - 2 ), ", " , (n - 1 ), ", " , n, ")" ); # Driver code if __name__ = = '__main__' : n = 5 ; coPrimeSet(n); # This code is contributed by 29AjayKumar |
C#
// C# implementation to print // all distinct co-prime sets // possible for numbers from 1 to N using System; class GFG{ // Function to print all co-prime sets static void coPrimeSet( int n) { int firstadj, secadj; // Check if n is less than 4 then // simply print all values till n if (n < 4) { Console.Write( "( " ); for ( int i = 1; i <= n; i++) Console.Write(i + ", " ); Console.Write( ")\n" ); } // For all the values of n > 3 else { // Check if n is even then // every set will contain // 2 adjacent elements up-to n if (n % 2 == 0) { for ( int i = 0; i < n / 2; i++) { firstadj = 2 * i + 1; secadj = 2 * i + 2; Console.Write( "(" + firstadj + ", " + secadj + ")\n" ); } } else { // If n is odd then every set will // contain 2 adjacent element // except the last set which // will have last three elements for ( int i = 0; i < n / 2 - 1; i++) { firstadj = 2 * i + 1; secadj = 2 * i + 2; Console.Write( "(" + firstadj + ", " + secadj + ")\n" ); } // Last element for odd case Console.Write( "(" + (n - 2) + ", " + (n - 1) + ", " + n + ")\n" ); } } } // Driver code public static void Main() { int n = 5; coPrimeSet(n); } } // This code is contributed by Code_Mech |
Javascript
<script> // Javascript implementation to print // all distinct co-prime sets // possible for numbers from 1 to N // Function to print all co-prime sets function coPrimeSet(n) { let firstadj, secadj; // Check if n is less than 4 then // simply print all values till n if (n < 4) { document.write( "( " ); for (let i = 1; i <= n; i++) document.write(i + ", " ); document.write( ")" + "<br/>" ); } // For all the values of n > 3 else { // Check if n is even then // every set will contain // 2 adjacent elements up-to n if (n % 2 == 0) { for (let i = 0; i < Math.floor(n / 2); i++) { firstadj = 2 * i + 1; secadj = 2 * i + 2; document.write( "(" + firstadj + ", " + secadj + ")" + "<br/>" ); } } else { // If n is odd then every set will // contain 2 adjacent element // except the last set which // will have last three elements for (let i = 0; i < Math.floor(n / 2) - 1; i++) { firstadj = 2 * i + 1; secadj = 2 * i + 2; document.write( "(" + firstadj + ", " + secadj + ")" + "<br/>" ); } // Last element for odd case document.write( "(" + (n - 2) + ", " + ( n - 1) + ", " + n + ")" + "<br/>" ); } } } // Driver Code let n = 5; coPrimeSet(n); </script> |
Output:
(1, 2) (3, 4, 5)
Time complexity: O(n)
Auxiliary space: O(1)
Please Login to comment...