Open In App

Python – Distinct Positive Integers Sum to K

Improve
Improve
Like Article
Like
Save
Share
Report

Given a sum K then extracts distinct positive numbers that reach the sum.

Input : K = 17 
Output : [1, 2, 3, 4, 7] 
Explanation : List summation equals 17.

Input : K = 21 
Output : [1, 2, 3, 4, 11] 
Explanation : List summation equals 21. 
 

Method #1 : Using loop

In this, we take the smallest possible values that can reach K, for the last value, we subtract the remaining value from K from summed valued till the point.

Python3




# Python3 code to demonstrate working of
# Distinct Positive Integers Sum to K
# Using loop
 
# initializing K
K = 19
 
# printing K
print("The value of K : " + str(K))
 
res = []
idx = 0
for ele in range(1, K):
    idx += ele
     
    # checking for last element point
    if K - idx < ele + 1:
         
        # appending initial elements
        res.extend(list(range(1, ele)))
         
        # appending last element left
        res.append(K - idx + ele)
        break
 
# printing result
print("The Required elements : " + str(res))


Output

The value of K : 19
The Required elements : [1, 2, 3, 4, 9]

Time Complexity: O(n)
Auxiliary Space: O(n)

Method #2 : Using combinations() + sum()

In this, we get the elements using combinations(), and check for sum using summation, this doesn’t perform in greedy but random way to get to the required summation.

Python3




# Python3 code to demonstrate working of
# Distinct Positive Integers Sum to K
# Using combinations() + sum()
from itertools import combinations
 
# initializing K
K = 19
 
# printing K
print("The value of K : " + str(K))
 
res = []
flag = 0
for idx in range(K - 1, 0, -1):
     
    # forming combinations
    for sub in combinations(range(1, K), idx):
        if sum(sub) == K and flag == 0:
            res.extend(list(sub))
            flag = 1
            break
        else:
            continue
        break
 
# printing result
print("The Required elements : " + str(res))


Output

The value of K : 19
The Required elements : [1, 2, 3, 4, 9]

Time Complexity: O(n), where n is the length of the input list. This is because we’re using the built-incombinations() + sum() which has a time complexity of O(n) in the worst case.
Auxiliary Space: O(n), where n is the length of the input list as we’re using additional space other than the input list itself. 



Last Updated : 08 Mar, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads