Given two numbers N and K, the task is to split this number into K positive integers such that their sum is equal to N and none of these K integers is a multiple of K.
Note: N>=2
Examples:
Input: N = 10, K = 3
Output: 1, 1, 8
Input: N = 18, K = 3
Output:1, 1, 16
Approach:
To split N into K numbers, we need to approach the problem by the following steps:
- Check if N is divisible by K or not.
- If N is divisible by K, then N – K + 1 is not divisible by K. Hence, we can split N into N – K + 1 as one part and all the remaining K – 1 parts as 1.
- If N is not divisible by K:
- If K is 2, then it is not possible to split.
- Otherwise, split N into K-2 parts as all 1 and 2 and N – K as the remaining two parts.
Below code is the implementation of the above approach:
C++
// C++ program to split a number // as sum of K numbers which are // not divisible by K #include <iostream> using namespace std;
// Function to split into K parts // and print them void printKParts( int N, int K)
{ if (N % K == 0) {
// Print 1 K - 1 times
for ( int i = 1; i < K; i++)
cout << "1, " ;
// Print N - K + 1
cout << N - (K - 1) << endl;
}
else {
if (K == 2) {
cout << "Not Possible" << endl;
return ;
}
// Print 1 K-2 times
for ( int i = 1; i < K - 1; i++)
cout << 1 << ", " ;
// Print 2 and N - K
cout << 2 << ", "
<< N - K << endl;
}
} // Driver code int main()
{ int N = 18, K = 5;
printKParts(N, K);
return 0;
} |
Java
// Java program to split a number // as sum of K numbers which are // not divisible by K class GFG{
// Function to split into K parts // and print them static void printKParts( int N, int K)
{ if (N % K == 0 )
{
// Print 1 K - 1 times
for ( int i = 1 ; i < K; i++)
System.out.print( "1, " );
// Print N - K + 1
System.out.print(N - (K - 1 ) + "\n" );
}
else
{
if (K == 2 )
{
System.out.print( "Not Possible" + "\n" );
return ;
}
// Print 1 K-2 times
for ( int i = 1 ; i < K - 1 ; i++)
System.out.print( 1 + ", " );
// Print 2 and N - K
System.out.print( 2 + ", " + (N - K) + "\n" );
}
} // Driver code public static void main(String[] args)
{ int N = 18 , K = 5 ;
printKParts(N, K);
} } // This code is contributed by 29AjayKumar |
Python3
# Python3 program to split a number # as sum of K numbers which are # not divisible by K # Function to split into K parts # and print them def printKParts(N, K):
if (N % K = = 0 ):
# Print 1 K - 1 times
for i in range ( 1 , K):
print ( "1, " );
# Print N - K + 1
print (N - (K - 1 ), end = "");
else :
if (K = = 2 ):
print ( "Not Possible" , end = "");
return ;
# Print 1 K-2 times
for i in range ( 1 , K - 1 ):
print ( 1 , end = ", " );
# Print 2 and N - K
print ( 2 , ", " , (N - K), end = "");
# Driver code if __name__ = = '__main__' :
N = 18 ;
K = 5 ;
printKParts(N, K);
# This code is contributed by Rohit_ranjan |
C#
// C# program to split a number // as sum of K numbers which are // not divisible by K using System;
class GFG{
// Function to split into K parts // and print them static void printKParts( int N, int K)
{ if (N % K == 0)
{
// Print 1 K - 1 times
for ( int i = 1; i < K; i++)
Console.Write( "1, " );
// Print N - K + 1
Console.Write(N - (K - 1) + "\n" );
}
else
{
if (K == 2)
{
Console.Write( "Not Possible" + "\n" );
return ;
}
// Print 1 K-2 times
for ( int i = 1; i < K - 1; i++)
Console.Write(1 + ", " );
// Print 2 and N - K
Console.Write(2 + ", " + (N - K) + "\n" );
}
} // Driver code public static void Main(String[] args)
{ int N = 18, K = 5;
printKParts(N, K);
} } // This code is contributed by sapnasingh4991 |
Javascript
<script> // Javascript program to split a number // as sum of K numbers which are // not divisible by K // Function to split into K parts // and print them function printKParts(N, K)
{ if (N % K == 0) {
// Print 1 K - 1 times
for ( var i = 1; i < K; i++)
document.write( "1, " );
// Print N - K + 1
document.write( (N - (K - 1)) + "<br>" );
}
else {
if (K == 2) {
document.write( "Not Possible" + "<br>" );
return ;
}
// Print 1 K-2 times
for ( var i = 1; i < K - 1; i++)
document.write( 1 + ", " );
// Print 2 and N - K
document.write( 2 + ", "
+ (N - K) + "<br>" );
}
} // Driver code var N = 18, K = 5;
printKParts(N, K); </script> |
Output:
1, 1, 1, 2, 13
Time Complexity: O(K)
Auxiliary Space: O(1)