0033. 数字抵消分数
* * * *
拉格朗日计划
* * * *
数字抵消分数

49/98是个颇为有趣的分数,因为将分子和分母中的9“消去”后得4/8,其值与原数相同。

类似地,若分子分母都是10的倍数,那么消去两者末尾的0所得的新分数与原数也相同,例如30/50=3/5。让我们称这种情况为这一现象的平凡解。

在所有分子和分母都是两位数的真分数中恰有四个非平凡解。

求将这四个分数的乘积写成最简分数后分母的值。

本题难度:



解答

显然数字0不会出现在这样的分数中。取$i,j,k\in\{1,\ldots,9\}$且$i < j$,则有以下两种情况: $$\frac{10i+k}{10k+j}=\frac{i}{j},\quad \frac{10k+i}{10j+k}=\frac{i}{j},$$ 第一种情况下i不能等于k,否则有$i=j$矛盾,又由真分数的要求可知此时$i < k$。同理第二种情况时$k < j$。暴力搜索即得结果,这四个分数是 \begin{align*} \frac{1}{4}&=\frac{16}{64} \\ \frac{1}{5}&=\frac{19}{95} \\ \frac{2}{5}&=\frac{26}{65} \\ \frac{4}{8}&=\frac{49}{98}, \end{align*} 因此结果是 $4\times 5\times 5=100$。


for i in range(1,10):
  for j in range(i+1,10):
    for k in range(1,10):
      if k>i and i*j*10+j*k==i*k*10+i*j:
        print str(i)+"/"+str(j)+"="+str(i*10+k)+"/"+str(k*10+j)
      if k < j and i*j*10+i*k==j*k*10+i*j:
        print str(i)+"/"+str(j)+"="+str(k*10+i)+"/"+str(j*10+k)