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++
#include <bits/stdc++.h>
using namespace std;
void coPrimeSet( int n)
{
int firstadj, secadj;
if (n < 4) {
cout << "( " ;
for ( int i = 1; i <= n; i++)
cout << i << ", " ;
cout << ")\n" ;
}
else {
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 {
for ( int i = 0; i < n / 2 - 1; i++)
{
firstadj = 2 * i + 1;
secadj = 2 * i + 2;
cout << "(" << firstadj
<< ", " << secadj << ")\n" ;
}
cout << "(" << n - 2 << ", " << n - 1
<< ", " << n << ")\n" ;
}
}
}
int main()
{
int n = 5;
coPrimeSet(n);
return 0;
}
|
Java
import java.util.*;
class GFG{
static void coPrimeSet( int n)
{
int firstadj, secadj;
if (n < 4 )
{
System.out.print( "( " );
for ( int i = 1 ; i <= n; i++)
System.out.print(i + ", " );
System.out.print( ")\n" );
}
else
{
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
{
for ( int i = 0 ; i < n / 2 - 1 ; i++)
{
firstadj = 2 * i + 1 ;
secadj = 2 * i + 2 ;
System.out.print( "(" + firstadj +
", " + secadj + ")\n" );
}
System.out.print( "(" + (n - 2 ) +
", " + ( n - 1 ) +
", " + n + ")\n" );
}
}
}
public static void main(String[] args)
{
int n = 5 ;
coPrimeSet(n);
}
}
|
Python3
def coPrimeSet(n):
firstadj = 0 ;
secadj = 0 ;
if (n < 4 ):
print ( "( " );
for i in range ( 1 , n + 1 ):
print (i + ", " );
print ( ")" );
else :
if (n % 2 = = 0 ):
for i in range ( 0 , n / 2 ):
firstadj = 2 * i + 1 ;
secadj = 2 * i + 2 ;
print ( "(" , firstadj, ", " ,
secadj, ")" );
else :
for i in range ( 0 , int (n / 2 ) - 1 ):
firstadj = 2 * i + 1 ;
secadj = 2 * i + 2 ;
print ( "(" , firstadj, ", " ,
secadj, ")" );
print ( "(" , (n - 2 ), ", " ,
(n - 1 ), ", " , n, ")" );
if __name__ = = '__main__' :
n = 5 ;
coPrimeSet(n);
|
C#
using System;
class GFG{
static void coPrimeSet( int n)
{
int firstadj, secadj;
if (n < 4)
{
Console.Write( "( " );
for ( int i = 1; i <= n; i++)
Console.Write(i + ", " );
Console.Write( ")\n" );
}
else
{
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
{
for ( int i = 0; i < n / 2 - 1; i++)
{
firstadj = 2 * i + 1;
secadj = 2 * i + 2;
Console.Write( "(" + firstadj +
", " + secadj + ")\n" );
}
Console.Write( "(" + (n - 2) +
", " + (n - 1) +
", " + n + ")\n" );
}
}
}
public static void Main()
{
int n = 5;
coPrimeSet(n);
}
}
|
Javascript
<script>
function coPrimeSet(n)
{
let firstadj, secadj;
if (n < 4)
{
document.write( "( " );
for (let i = 1; i <= n; i++)
document.write(i + ", " );
document.write( ")" + "<br/>" );
}
else
{
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
{
for (let i = 0; i < Math.floor(n / 2) - 1; i++)
{
firstadj = 2 * i + 1;
secadj = 2 * i + 2;
document.write( "(" + firstadj +
", " + secadj + ")" + "<br/>" );
}
document.write( "(" + (n - 2) +
", " + ( n - 1) +
", " + n + ")" + "<br/>" );
}
}
}
let n = 5;
coPrimeSet(n);
</script>
|
Time complexity: O(n)
Auxiliary space: O(1)