Open In App

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

Last Updated : 31 Aug, 2023
Summarize
Comments
Improve
Suggest changes
Share
Like Article
Like
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)


Next Article

Similar Reads