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

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 <iostream>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 Codeint 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 3import 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 Codeif __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 3function 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 Codelet N = 10;printThreeParts(N); |
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
- 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 .
- 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 <iostream>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 codeint 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 codepublic 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
<script>// javascript program to split a number into three parts such// than none of them is divisible by 3.function printThreeParts(N){ // Print x = 1, y = 1 and z = N - 2 if (N % 3 == 0) document.write("x = 1, y = 1, z = "+ (N-2)); // Otherwise, print x = 1, y = 2 and z = N - 3 else document.write(" x = 1, y = 2, z = "+ (N-3)); }// Driver codevar N = 10; printThreeParts(N);// This code contributed by Princi Singh </script> |
PHP
<?php // PHP program to split a number into // three parts such than none of them // is divisible by 3.function printThreeParts($N){ // Print x = 1, y = 1 and z = N - 2 if ($N % 3 == 0) echo " x = 1, y = 1, z = " . ($N - 2) . "\n"; // Otherwise, print x = 1, // y = 2 and z = N - 3 else echo " x = 1, y = 2, z = " . ($N - 3) . "\n"; }// Driver code$N = 10; printThreeParts($N);// This code is contributed by ita_c?> |
x = 1, y = 2, z = 7
Time Complexity: O(1)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



