确定 x/y 分数具有重复的十进制扩展

问题描述

是否有任何快速方法可以仅根据最终给出结果重复部分的整数来确定 x/y 分数?谢谢。

JPanel

解决方法

给定整数 x 和 y,分数 x/y 具有重复的十进制展开当且仅当:

  1. y / gcd(x,y) 具有 2 和 5 以外的因子,并且
  2. x 除以 y 的余数不为零

注意:正如评论中指出的那样,我的原始答案有一个缺陷,即它仅在 x/y 是不可约分数(最低限度)时才有效。这可以通过首先将 y 除以 gcd(x,y) 来解决,这样您就可以检查等效不可约分数的分母是否具有除 2 和 5 的幂以外的因子。

第二个条件很容易检查:

HasRepeatingDecimal(x,y)
1. if x % y == 0 then return false

现在我们需要看看 y / gcd(x,y) 是否有 2 和 5 以外的因子。我们可以通过重复将 y / gcd(x,y) 除以 5 然后除以 2 来实现,看看我们是否以数字 1 结尾:

HasRepeatingDecimal(x,y)
1. if x % y == 0 then return false
2. y = y / gcd(x,y)
3. while (y % 5 == 0) y = y / 5
4. while (y % 2 == 0) y = y / 2
5. if y == 1 then return true else return false

您可以检查分母被 2 和 5 整除的原因是十进制系统的基数为 10,而 2 和 5 是 10 的唯一质因数。如果您使用的是基数 21,则需要检查 y / gcd(x,y) 改为 3^ax 7^b 形式。