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:
// 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 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);
}
}
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)
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();
}
}
}
// 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
- 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:
// 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 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 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# 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.
}
<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 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)