loading...

Daily Challenge #294 - Sum and GCD Practice

thepracticaldev profile image dev.to staff ・1 min read

Given the sum and greatest common divisor of two numbers, return those two numbers in ascending order. If the numbers do not exist, return -1 or your language's equivalent.

Examples

Given sum = 12 and gcd = 4...

solve(12,4) = [4,8]. The two numbers 4 and 8 sum to 12 and have a gcd of 4.

solve(12,5) = -1. No two numbers exist that sum to 12 and have gcd of 5.

solve(10,2) = [2,8]. Note that [4,6] is also a possibility but we pick the one with the lower first element: 2 < 4, so we take [2,8].

Tests

solve(12,4)
solve(16,8)
solve(21,7)

Good luck!


This challenge comes from KenKamau on CodeWars. Thank you to CodeWars, who has licensed redistribution of this challenge under the 2-Clause BSD License!

Want to propose a challenge idea for a future post? Email yo+challenge@dev.to with your suggestions!

Posted on by:

thepracticaldev profile

dev.to staff

@thepracticaldev

The hardworking team behind dev.to ❤️

Discussion

pic
Editor guide
 

If there is a combination, minimum number = gcd itself, the other number = sum - gcd

const solve = (sum,gcd) => (sum-gcd) % gcd ? -1 : [gcd,sum-gcd]
 

Well spotted!

 

Here is my simple solution with Python:

def solve(s,g):
    answer = []
    original_s = s
    while s % g == 0:
        if int(s / g) <= g:
            answer.append(g)
            break

        s = int(s / g)

    if s != original_s and len(answer) == 0:
        answer.append(g)

    if len(answer) == 0:
        return -1

    answer.append(original_s - answer[0])

    return tuple(answer)