# 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. }



## PHP



Output

x = 1, y = 2, z = 7

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