DEV Community

Discussion on: Daily Challenge #130 - GCD Sum

Collapse
 
rulikkk profile image
Rustem Mustafin

Assume 0 < N <= M
Sum = N + M
GCD = G, so that N = x * G, M = y * G and x, y are relatively prime integers > 0
=>
Sum = x * G + y * G = G * (x + y)
Sum / G should also be integer, otherwise no answer
x + y = Sum / G
We need to take smallest x, so that x, y are relatively prime, so x = 1
=> x = 1 => N = G => M = Sum - G
Answer: GCD, Sum - GCD
Test:
1) Solve(12, 4) = 4, 8; GCD(4, 8) = 4; 4 + 8 = 12; OK
2) Solve(12, 5): 12 % 5 > 0 => No Answer; OK
3) Solve(10, 2) = 2, 8; GCD(2, 8) = 2; 2 + 8 = 10; OK

Collapse
 
midhetfatema94 profile image
Midhet Sulemani

Reiterating to this logic in Swift:

import UIKit

func solve(sum: Int, hcf: Int) -> (Int, Int)? {
    let x = 1
    var y: Int!

    y = sum - hcf

    let verificationInt: Float = Float((hcf + y)/hcf)
    let verificationSum = Int(verificationInt + 1)
    if verificationSum % hcf == 0 {
        return (hcf*x, y)
    }
    return nil
}

if let solution = solve(sum: 12, hcf: 5) {
    print(solution)
} else {
    print(-1)
}