# Split N natural numbers into two sets having GCD of their sums greater than 1

Given an integer N, the task is to create two sets of distinct elements from 1 to N such that the gcd of their respective sums is greater than 1. Print the respective sets. If no such split can be done, print -1.

Examples:

Input: N = 5
Output:
2 4
1 3 5
Explanation:
GCD(Sum({2, 4}), Sum({1, 3, 5}) = GCD(6, 9) = 3

Input: N = 2
Output: -1
Explanation:
For N = 2, it is not possible to divide into two sets having GCD of their sum greater than 1.

Approach 1: A simple approach is to split all even numbers up to N into one set and all odd numbers into another set.

Below code is the implementation of the approach:

## C++

 `// C++ program to split N natural numbers ` `// into two sets having GCD ` `// of their sums greater than 1 ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Function to create ` `// and print the two sets ` `void` `createSets(``int` `N) ` `{ ` `    ``// No such split ` `    ``// possible for N <= 2 ` `    ``if` `(N <= 2) { ` `        ``cout << ``"-1"` `<< endl; ` `        ``return``; ` `    ``} ` ` `  `    ``// Print the first set ` `    ``// consisting of even elements ` `    ``for` `(``int` `i = 2; i <= N; i += 2) ` `        ``cout << i << ``" "``; ` `    ``cout << ``"\n"``; ` `    ``// Print the second set ` `    ``// consisting of odd ones ` `    ``for` `(``int` `i = 1; i <= N; i += 2) { ` `        ``cout << i << ``" "``; ` `    ``} ` `} ` `// Driver Code ` `int` `main() ` `{ ` ` `  `    ``int` `N = 6; ` `    ``createSets(N); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to split N natural numbers ` `// into two sets having GCD ` `// of their sums greater than 1 ` `class` `GFG{ ` `   `  `// Function to create ` `// and print the two sets ` `static` `void` `createSets(``int` `N) ` `{ ` `    ``// No such split ` `    ``// possible for N <= 2 ` `    ``if` `(N <= ``2``) ` `    ``{ ` `        ``System.out.println(``"-1"` `); ` `        ``return``; ` `    ``} ` ` `  `    ``// Print the first set ` `    ``// consisting of even elements ` `    ``for` `(``int` `i = ``2``; i <= N; i += ``2``) ` `        ``System.out.print(i + ``" "``); ` `    ``System.out.print(``"\n"``) ; ` `   `  `    ``// Print the second set ` `    ``// consisting of odd ones ` `    ``for` `(``int` `i = ``1``; i <= N; i += ``2``)  ` `    ``{ ` `        ``System.out.print(i + ``" "``); ` `    ``} ` `} ` `// Driver Code ` `public` `static` `void` `main(String[] args) ` `{ ` ` `  `    ``int` `N = ``6``; ` `    ``createSets(N); ` `} ` `} ` ` `  `// This code is contributed by shivanisinghss2110`

## Python3

 `# Python3 program to split N natural numbers ` `# into two sets having GCD ` `# of their sums greater than 1 ` ` `  `# Function to create ` `# and print the two sets ` `def` `createSets(N): ` `   `  `    ``# No such split ` `    ``# possible for N <= 2 ` `    ``if` `(N <``=` `2``): ` `        ``print``(``"-1"``); ` `        ``return``; ` ` `  `    ``# Print the first set ` `    ``# consisting of even elements ` `    ``for` `i ``in` `range``(``2``, N ``+` `1``, ``2``): ` `        ``print``(i, end``=``" "``); ` `    ``print``(""); ` ` `  `    ``# Print the second set ` `    ``# consisting of odd ones ` `    ``for` `i ``in` `range``(``1``, N ``+` `1``, ``2``): ` `        ``print``(i, end ``=` `" "``); ` ` `  `# Driver Code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``N ``=` `6``; ` `    ``createSets(N); ` ` `  `# This code is contributed by gauravrajput1`

## C#

 `// C# program to split N natural numbers ` `// into two sets having GCD ` `// of their sums greater than 1 ` `using` `System; ` `class` `GFG{ ` ` `  `// Function to create ` `// and print the two sets ` `static` `void` `createSets(``int` `N) ` `{ ` `    ``// No such split ` `    ``// possible for N <= 2 ` `    ``if` `(N <= 2) ` `    ``{ ` `        ``Console.WriteLine(``"-1"` `); ` `        ``return``; ` `    ``} ` ` `  `    ``// Print the first set ` `    ``// consisting of even elements ` `    ``for` `(``int` `i = 2; i <= N; i += 2) ` `        ``Console.Write(i + ``" "``); ` `    ``Console.Write(``"\n"``) ; ` ` `  `    ``// Print the second set ` `    ``// consisting of odd ones ` `    ``for` `(``int` `i = 1; i <= N; i += 2)  ` `    ``{ ` `        ``Console.Write(i + ``" "``); ` `    ``} ` `} ` `// Driver Code ` `public` `static` `void` `Main(String[] args) ` `{ ` ` `  `    ``int` `N = 6; ` `    ``createSets(N); ` `} ` `} ` ` `  `// This code is contributed by shivanisinghss2110`

## Javascript

 ``

Output:

```2 4 6
1 3 5```

Time Complexity: O(N)

Auxiliary Space: O(1),since no extra space has been taken.

Approach 2: This approach can be divided into 2 cases based on N:

1. If N is odd:
• The sum of N natural numbers is divisible by (N+1)/2 in this case.
• Therefore we only need to put (N+1)/2 into first set and the remaining numbers into second set.
• This will automatically make the GCD of their sums greater than 1.
2. If N is even:
• The sum of N natural numbers is divisible by N/2 in this case.
• Therefore we only need to put N/2 into first set and the remaining numbers into second set.
• This will automatically make the GCD of their sums greater than 1.

Below is the implementation of the above approach:

## C++

 `// C++ program to split N natural numbers ` `// into two sets having GCD ` `// of their sums greater than 1 ` ` `  `#include ` `using` `namespace` `std; ` ` `  `#define ll long long ` ` `  `// Function to create ` `// and print the two sets ` `void` `createSets(ll n) ` `{ ` `    ``// For n <= 2 such sets ` `    ``// can never be formed ` `    ``if` `(n <= 2) { ` `        ``cout << ``"-1"``; ` `        ``return``; ` `    ``} ` ` `  `    ``else` `{ ` ` `  `        ``// Check if N is even or odd ` `        ``// and store the element ` `        ``// which divides the sum of N ` `        ``// natural numbers accordingly ` `        ``ll x = (n % 2 == 0) ? (n / 2) ` `                            ``: ((n + 1) / 2); ` ` `  `        ``// First set ` `        ``cout << x << endl; ` ` `  `        ``// Print elements of second set ` `        ``for` `(ll i = 1; i <= n; i++) { ` ` `  `            ``if` `(i == x) ` `                ``continue``; ` ` `  `            ``cout << i << ``" "``; ` `        ``} ` `    ``} ` `    ``return``; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``ll N = 7; ` ` `  `    ``createSets(N); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to split N natural numbers ` `// into two sets having GCD ` `// of their sums greater than 1 ` `class` `GFG{ ` ` `  `// Function to create ` `// and print the two sets ` `static` `void` `createSets(``long` `n) ` `{ ` `     `  `    ``// For n <= 2 such sets ` `    ``// can never be formed ` `    ``if` `(n <= ``2``) ` `    ``{ ` `        ``System.out.print(``"-1"``); ` `        ``return``; ` `    ``} ` `    ``else` `    ``{ ` `         `  `        ``// Check if N is even or odd ` `        ``// and store the element ` `        ``// which divides the sum of N ` `        ``// natural numbers accordingly ` `        ``long` `x = (n % ``2` `== ``0``) ? (n / ``2``) : ` `                          ``((n + ``1``) / ``2``); ` ` `  `        ``// First set ` `        ``System.out.print(x + ``"\n"``); ` ` `  `        ``// Print elements of second set ` `        ``for``(``int` `i = ``1``; i <= n; i++) ` `        ``{ ` `            ``if` `(i == x) ` `                ``continue``; ` ` `  `            ``System.out.print(i + ``" "``); ` `        ``} ` `    ``} ` `    ``return``; ` `} ` ` `  `// Driver code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``long` `N = ``7``; ` ` `  `    ``createSets(N); ` `} ` `} ` ` `  `// This code is contributed by PrinciRaj1992 `

## Python3

 `# Python3 program to split N natural numbers ` `# into two sets having GCD ` `# of their sums greater than 1 ` ` `  `# Function to create ` `# and print the two sets ` `def` `createSets(n): ` `     `  `    ``# For n <= 2 such sets ` `    ``# can never be formed ` `    ``if` `(n <``=` `2``): ` `        ``print``(``"-1"``); ` `        ``return``; ` `    ``else``: ` ` `  `        ``# Check if N is even or odd ` `        ``# and store the element ` `        ``# which divides the sum of N ` `        ``# natural numbers accordingly ` `        ``x ``=` `(n ``/``/` `2``) ``if``(n ``%` `2` `=``=` `0``) ``else` `( ` `            ``(n ``+` `1``) ``/``/` `2``); ` ` `  `        ``# First set ` `        ``print``(x, ``" "``); ` ` `  `        ``# Print elements of second set ` `        ``for` `i ``in` `range``(``1``, n ``+` `1``): ` `            ``if` `(i ``=``=` `x): ` `                ``continue``; ` ` `  `            ``print``(i, end ``=` `" "``); ` ` `  `    ``return``; ` ` `  `# Driver code ` `if` `__name__ ``=``=` `'__main__'``: ` `     `  `    ``N ``=` `7``; ` ` `  `    ``createSets(N); ` ` `  `# This code is contributed by 29AjayKumar `

## C#

 `// C# program to split N natural numbers ` `// into two sets having GCD ` `// of their sums greater than 1 ` `using` `System; ` `class` `GFG{ ` ` `  `// Function to create ` `// and print the two sets ` `static` `void` `createSets(``long` `n) ` `{ ` `     `  `    ``// For n <= 2 such sets ` `    ``// can never be formed ` `    ``if` `(n <= 2) ` `    ``{ ` `        ``Console.Write(``"-1"``); ` `        ``return``; ` `    ``} ` `    ``else` `    ``{ ` `         `  `        ``// Check if N is even or odd ` `        ``// and store the element ` `        ``// which divides the sum of N ` `        ``// natural numbers accordingly ` `        ``long` `x = (n % 2 == 0) ? (n / 2) : ` `                          ``((n + 1) / 2); ` ` `  `        ``// First set ` `        ``Console.Write(x + ``"\n"``); ` ` `  `        ``// Print elements of second set ` `        ``for``(``int` `i = 1; i <= n; i++) ` `        ``{ ` `            ``if` `(i == x) ` `                ``continue``; ` ` `  `            ``Console.Write(i + ``" "``); ` `        ``} ` `    ``} ` `    ``return``; ` `} ` ` `  `// Driver code ` `public` `static` `void` `Main(String[] args) ` `{ ` `    ``long` `N = 7; ` ` `  `    ``createSets(N); ` `} ` `} ` ` `  `// This code is contributed by sapnasingh4991`

## Javascript

 ``

Output:

```4
1 2 3 5 6 7```

Time Complexity: O(N)
Auxiliary Space Complexity: O(1)

Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!