fork download
  1. inputs = [(4,8), (1536,78360), (51478, 5536), (46410, 119340), (7673, 4729), (4096, 1024)]
  2.  
  3. def findFirstDivisor(number):
  4. for i in range(2, number):
  5. if number % i == 0:
  6. return i
  7. return number
  8.  
  9. def tree(number):
  10. fact_tree = {}
  11. while findFirstDivisor(number):
  12. div = findFirstDivisor(number)
  13. fact_tree[div] = 1 if div not in fact_tree.keys() else fact_tree[div] + 1
  14. number = int(number / div)
  15. if number == 1:
  16. return fact_tree
  17.  
  18. def recombine(num_tree, dem_tree):
  19. num, dem = 1, 1
  20. for key, value in num_tree.items():
  21. num *= key ** value
  22. for key, value in dem_tree.items():
  23. dem *= key ** value
  24. return [num, dem]
  25.  
  26. def simplify(inputset):
  27. num_tree = tree(inputset[0])
  28. dem_tree = tree(inputset[1])
  29.  
  30. for key in num_tree.keys():
  31. if key in dem_tree.keys():
  32. num_amount, dem_amount = num_tree[key], dem_tree[key]
  33. num_tree[key] = num_amount-dem_amount if num_amount>dem_amount else 0
  34. dem_tree[key] = dem_amount-num_amount if dem_amount>num_amount else 0
  35.  
  36. return recombine(num_tree, dem_tree)
  37.  
  38.  
  39. for inputset in inputs:
  40. print(simplify(inputset))
Success #stdin #stdout 0.03s 9944KB
stdin
Standard input is empty
stdout
[1, 2]
[64, 3265]
[25739, 2768]
[7, 18]
[7673, 4729]
[4, 1]