Open In App

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

Improve
Improve
Like Article
Like
Save
Share
Report

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 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 <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 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




<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 code
 
var 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
?>


Output

 x = 1, y = 2, z = 7






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



Last Updated : 31 Aug, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads