Split a number as sum of K numbers which are not divisible by K

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output:

1, 1, 1, 2, 13

Time Complexity: O(K)

competitive-programming-img




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.