# The important bit:
def reduce_fraction(n, d):
f_iter = range(1, min(n, d) + 1)
n_list = [x for x in f_iter if n % x == 0]
d_list = [y for y in f_iter if d % y == 0]
f_list = [f for f in n_list if f in d_list]
gcf = max(f_list)
return str(n//gcf) + ' ' + str(d//gcf)
# Parsing input and printing output:
def parse_input(s):
output = []
for line in s.splitlines():
line = line.strip()
if line:
line = tuple(map(int, line.split()))
output += [line]
return output
def main():
numbers = '''
4 8
1536 78360
51478 5536
46410 119340
7673 4729
4096 1024
'''
tup_list = parse_input(numbers)
for x, y in tup_list:
print(reduce_fraction(x, y))
if __name__ == '__main__': main()
IyBUaGUgaW1wb3J0YW50IGJpdDoKCmRlZiByZWR1Y2VfZnJhY3Rpb24obiwgZCk6CiAgICBmX2l0ZXIgPSByYW5nZSgxLCBtaW4obiwgZCkgKyAxKQogICAgbl9saXN0ID0gW3ggZm9yIHggaW4gZl9pdGVyIGlmIG4gJSB4ID09IDBdCiAgICBkX2xpc3QgPSBbeSBmb3IgeSBpbiBmX2l0ZXIgaWYgZCAlIHkgPT0gMF0KICAgIGZfbGlzdCA9IFtmIGZvciBmIGluIG5fbGlzdCBpZiBmIGluIGRfbGlzdF0KICAgIGdjZiA9IG1heChmX2xpc3QpCiAgICByZXR1cm4gc3RyKG4vL2djZikgKyAnICcgKyBzdHIoZC8vZ2NmKQoKIyBQYXJzaW5nIGlucHV0IGFuZCBwcmludGluZyBvdXRwdXQ6CgpkZWYgcGFyc2VfaW5wdXQocyk6CiAgICBvdXRwdXQgPSBbXQogICAgZm9yIGxpbmUgaW4gcy5zcGxpdGxpbmVzKCk6CiAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQogICAgICAgIGlmIGxpbmU6CiAgICAgICAgICAgIGxpbmUgPSB0dXBsZShtYXAoaW50LCBsaW5lLnNwbGl0KCkpKQogICAgICAgICAgICBvdXRwdXQgKz0gW2xpbmVdCiAgICByZXR1cm4gb3V0cHV0CgpkZWYgbWFpbigpOgogICAgbnVtYmVycyA9ICcnJwogICAgICAgIDQgOAogICAgICAgIDE1MzYgNzgzNjAKICAgICAgICA1MTQ3OCA1NTM2CiAgICAgICAgNDY0MTAgMTE5MzQwCiAgICAgICAgNzY3MyA0NzI5CiAgICAgICAgNDA5NiAxMDI0CiAgICAgICAgJycnCgogICAgdHVwX2xpc3QgPSBwYXJzZV9pbnB1dChudW1iZXJzKQoKICAgIGZvciB4LCB5IGluIHR1cF9saXN0OgogICAgICAgIHByaW50KHJlZHVjZV9mcmFjdGlvbih4LCB5KSkKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6IG1haW4oKQ==