Problem 33 「桁消去分数」
49/98は面白い分数である.「分子と分母からそれぞれ9を取り除くと, 49/98 = 4/8 となり, 簡単な形にすることができる」と経験の浅い数学者が誤って思い込んでしまうかもしれないからである. (方法は正しくないが,49/98の場合にはたまたま正しい約分になってしまう.)
我々は 30/50 = 3/5 のようなタイプは自明な例だとする.
このような分数のうち, 1より小さく分子・分母がともに2桁の数になるような自明でないものは, 4個ある.
その4個の分数の積が約分された形で与えられたとき, 分母の値を答えよ.
def hoge():
numer, denom = 1, 1
_duplicate = lambda a, b: set(list(str(a))) & set(list(str(b)))
_replace = lambda a, b: float(str(a).replace(str(b), '', 1))
for a in range(11, 100):
if a % 10 == 0: continue
for b in range(a+1, 100):
if b % 10 == 0: continue
duplicate_num = _duplicate(a, b)
for n in duplicate_num:
if float(a) / b == _replace(a, n) / _replace(b, n):
numer, denom = numer * a, denom * b
return denom // gcd(numer, denom)
def gcd(a, b): # 最大公約数取得
while b:
a, b = b, a%b
return a
print(hoge())