Wednesday, November 20, 2024
Google search engine
HomeData Modelling & AISplit a number into 3 parts such that none of the parts...

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

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments