# Split a number into 3 parts such that none of the parts is divisible by 3

Last Updated : 31 Aug, 2023

You are given the number N. Your task is to split this number into 3 positive integers x, y, and z, such that their sum is equal to ‘N’ and none of the 3 integers is a multiple of 3. Given that N >= 2.

Examples:

Input : N = 10
Output : x = 1, y = 2, z = 7
Note that x + y + z = N and x, y & z are not divisible by N.
Input : 18
Output :x = 1, y = 1, z = 16

Naive Approach: The idea is to iterate three nested loops from 1 to N-1 and choose three elements such that their sum is equal to N and they are not divisible by 3. Below is the implementation of the approach:

## C++

 `// CPP program to split a number into three` `// parts such than none of them is divisible by 3` `#include ` `using` `namespace` `std;`   `void` `printThreeParts(``int` `N)` `{` `    ``// Traversing to choose first part` `    ``for` `(``int` `i = 1; i < N; i++) {`   `        ``// Traversing to choose second part` `        ``for` `(``int` `j = 1; j < N; j++) {`   `            ``// Traversing to choose third part` `            ``for` `(``int` `k = 1; k < N; k++) {` `              `  `                ``// if all three part's sum is N and` `                ``// they are not divisible by 3` `                ``// then print those` `                ``if` `((i + j + k == N) && (i % 3 != 0)` `                    ``&& (j % 3 != 0) && (k % 3 != 0)) {` `                    ``cout << ``"x = "` `<< i << ``", "` `                         ``<< ``"y = "` `<< j << ``", "` `                         ``<< ``"z = "` `<< k << endl;` `                    ``return``;` `                ``}` `            ``}` `        ``}` `    ``}` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `N = 10;` `    ``printThreeParts(N);` `  `  `    ``return` `0;` `}`

## Java

 `// Java program to split a number into three` `// parts such than none of them is divisible by 3` `import` `java.util.*;`   `class` `GFG {` `    ``public` `static` `void` `printThreeParts(``int` `N) {` `        ``// Traversing to choose first part` `        ``for` `(``int` `i = ``1``; i < N; i++) {`   `            ``// Traversing to choose second part` `            ``for` `(``int` `j = ``1``; j < N; j++) {`   `                ``// Traversing to choose third part` `                ``for` `(``int` `k = ``1``; k < N; k++) {`   `                    ``// if all three parts' sum is N and` `                    ``// they are not divisible by 3` `                    ``// then print those` `                    ``if` `((i + j + k == N) && (i % ``3` `!= ``0``)` `                            ``&& (j % ``3` `!= ``0``) && (k % ``3` `!= ``0``)) {` `                        ``System.out.println(``"x = "` `+ i + ``", "` `                                ``+ ``"y = "` `+ j + ``", "` `                                ``+ ``"z = "` `+ k);` `                        ``return``;` `                    ``}` `                ``}` `            ``}` `        ``}` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `main(String[] args) {` `        ``int` `N = ``10``;` `        ``printThreeParts(N);` `    ``}` `}`

## Python3

 `def` `print_three_parts(N):` `    ``# Traversing to choose first part` `    ``for` `i ``in` `range``(``1``, N):` `        ``# Traversing to choose second part` `        ``for` `j ``in` `range``(``1``, N):` `            ``# Traversing to choose third part` `            ``for` `k ``in` `range``(``1``, N):` `                ``# if all three part's sum is N and they are not divisible by 3` `                ``# then print those` `                ``if` `(i ``+` `j ``+` `k ``=``=` `N) ``and` `(i ``%` `3` `!``=` `0``) ``and` `(j ``%` `3` `!``=` `0``) ``and` `(k ``%` `3` `!``=` `0``):` `                    ``print``(f``"x = {i}, y = {j}, z = {k}"``)` `                    ``return`   `# Driver Code` `if` `__name__ ``=``=` `"__main__"``:` `    ``N ``=` `10` `    ``print_three_parts(N)`

## C#

 `using` `System;`   `namespace` `NumberSplit` `{` `    ``class` `Program` `    ``{` `        ``static` `void` `PrintThreeParts(``int` `N)` `        ``{` `            ``// Traversing to choose first part` `            ``for` `(``int` `i = 1; i < N; i++)` `            ``{` `                ``// Traversing to choose second part` `                ``for` `(``int` `j = 1; j < N; j++)` `                ``{` `                    ``// Traversing to choose third part` `                    ``for` `(``int` `k = 1; k < N; k++)` `                    ``{` `                        ``// if all three part's sum is N and` `                        ``// they are not divisible by 3` `                        ``// then print those` `                        ``if` `((i + j + k == N) && (i % 3 != 0)` `                            ``&& (j % 3 != 0) && (k % 3 != 0))` `                        ``{` `                            ``Console.WriteLine(\$``"x = {i}, y = {j}, z = {k}"``);` `                            ``return``;` `                        ``}` `                    ``}` `                ``}` `            ``}` `        ``}`   `        ``static` `void` `Main(``string``[] args)` `        ``{` `            ``int` `N = 10;` `            ``PrintThreeParts(N);`   `            ``// Ensure the console window remains open until a key is pressed.` `            ``Console.ReadKey();` `        ``}` `    ``}` `}`

## Javascript

 `// Function to split a number into three parts` `// such that none of them is divisible by 3` `function` `printThreeParts(N)` `{`   `    ``// Traversing to choose first part` `    ``for` `(let i = 1; i < N; i++) ` `    ``{` `    `  `        ``// Traversing to choose second part` `        ``for` `(let j = 1; j < N; j++) ` `        ``{` `        `  `            ``// Traversing to choose third part` `            ``for` `(let k = 1; k < N; k++)` `            ``{` `            `  `                ``// if all three part's sum is N and ` `                ``// they are not divisible by 3 then print those` `                ``if` `((i + j + k == N) && (i % 3 != 0) && ` `                ``(j % 3 != 0) && (k % 3 != 0)) {` `                    ``console.log(``"x = "` `+ i + ``", y = "` `+ j + ``", z = "` `+ k);` `                    ``return``;` `                ``}` `            ``}` `        ``}` `    ``}` `}`   `// Driver Code` `let N = 10;` `printThreeParts(N);`

Output

```x = 1, y = 1, z = 8

```

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

Efficient Approach: To split N into 3 numbers we split N as

1. If N is divisible by 3, then the numbers x, y, and z can be 1, 1, and N-2, respectively. All x, y, and z are not divisible by 3. And (1)+(1)+(N-2)=N .
2. If N is not divisible by 3 then N-3 will also not be divisible by 3. Therefore, we can have x=1, y=2, and z=N-3.Also, (1)+(2)+(N-3)=N.

Below is the implementation of the approach:

## C++

 `// CPP program to split a number into three parts such` `// than none of them is divisible by 3.` `#include ` `using` `namespace` `std;`   `void` `printThreeParts(``int` `N)` `{` `    ``// Print x = 1, y = 1 and z = N - 2` `    ``if` `(N % 3 == 0)` `        ``cout << ``" x = 1, y = 1, z = "` `<< N - 2 << endl; `   `    ``// Otherwise, print x = 1, y = 2 and z = N - 3` `    ``else` `        ``cout << ``" x = 1, y = 2, z = "` `<< N - 3 << endl; ` `}`   `// Driver code` `int` `main()` `{` `    ``int` `N = 10; ` `    ``printThreeParts(N);` `    ``return` `0;` `}`

## Java

 `// Java program to split a number into three parts such` `// than none of them is divisible by 3.` `import` `java.util.*;`   `class` `solution` `{`   `static` `void` `printThreeParts(``int` `N)` `{` `    ``// Print x = 1, y = 1 and z = N - 2` `    ``if` `(N % ``3` `== ``0``)` `        `  `        ``System.out.println(``"x = 1, y = 1, z = "``+ (N-``2``)); `   `    ``// Otherwise, print x = 1, y = 2 and z = N - 3` `    ``else` `        ``System.out.println(``" x = 1, y = 2, z = "``+ (N-``3``)); ` `}`   `// Driver code` `public` `static` `void` `main(String args[])` `{` `    ``int` `N = ``10``; ` `    ``printThreeParts(N);` `    `  `}` `}`

## Python3

 `# Python3 program to split a number into three parts such ` `# than none of them is divisible by 3. `   `def` `printThreeParts(N) :`   `    ``# Print x = 1, y = 1 and z = N - 2 ` `    ``if` `(N ``%` `3` `=``=` `0``) : ` `        ``print``(``" x = 1, y = 1, z = "``,N ``-` `2``) `   `    ``# Otherwise, print x = 1, y = 2 and z = N - 3 ` `    ``else` `:` `        ``print``(``" x = 1, y = 2, z = "``,N ``-` `3``) ` ` `    `# Driver code ` `if` `__name__ ``=``=` `"__main__"` `: ` ` `  `    ``N ``=` `10` `    ``printThreeParts(N)`   `# This code is contributed by Ryuga`

## C#

 `// C# program to split a number into three parts such ` `// than none of them is divisible by 3. ` `using` `System; `   `public` `class` `GFG{ ` `    ``static` `void` `printThreeParts(``int` `N) ` `{ ` `    ``// Print x = 1, y = 1 and z = N - 2 ` `    ``if` `(N % 3 == 0) ` `        ``Console.WriteLine(``" x = 1, y = 1, z = "``+(N - 2)); `   `    ``// Otherwise, print x = 1, y = 2 and z = N - 3 ` `    ``else` `        ``Console.WriteLine(``" x = 1, y = 2, z = "``+(N - 3)); ` `} `   `// Driver code ` `    ``static` `public` `void` `Main (){ ` `    ``int` `N = 10; ` `    ``printThreeParts(N); `     `    ``} ` `// This code is contributed by ajit. ` `} `

## Javascript

 ``

## PHP

 ``

Output

``` x = 1, y = 2, z = 7

```

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