Skip to content
Related Articles

Related Articles

Split a number as sum of K numbers which are not divisible by K
  • Last Updated : 20 Apr, 2021

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)
 

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up
Recommended Articles
Page :