Skip to content

Instantly share code, notes, and snippets.

@inytar
Created January 17, 2017 23:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save inytar/edb1269aab0516ce7909417802aba5d0 to your computer and use it in GitHub Desktop.
Save inytar/edb1269aab0516ce7909417802aba5d0 to your computer and use it in GitHub Desktop.
Hank & Pieter egyption fractions
def decompose(n):
# your code
num, _, den = n.partition('/')
if not den:
den = 1
if '.' in num:
pred, _, postd = num.partition('.')
num = int(pred) * 10**(len(postd))
num += int(postd)
den *= 10**(len(postd))
num = int(num)
den = int(den)
#num, den = reduce(num, den)
#print(num, den)
answer = []
if num // den:
answer.append(str(int(num//den)))
num = num%den
#print(answer)
#print(num, den)
#print(reduce(2 * 2 - 3, 3 * 2))
while num != 0:
i = cieldiv(den, num)
# num/den - 1/i
#print(num, i)
num, den = num * i - den, den * i
#num, den = reduce(num * i - den, den * i)
answer.append("1/{}".format(i))
#print(num, den)
return answer
def cieldiv(a, b):
return -(-a // b)
def reduce(num, den):
factors = get_factors(den)
for factor in factors:
if num % factor == 0:
num /= factor
den /= factor
return num, den
def get_factors(n):
factors = []
factor = 2
temp = n
while temp != 1:
if temp % factor == 0:
factors.append(factor)
temp /= factor
else:
factor += 1
return factors
def get_lcm(y1, y2):
factors = get_factors(y1)
for factor in factors:
if y2 % factor == 0:
y2 /= factor
return y2*y1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment