题目链接

CodeForce Round #483 C.Finite or not?(数论gcd)

题目大意是:

给你三个整数,p,q,b。其中p/q是个分数。该题目要求你给出p/q在b进制下是否是个无限小数。

解题思路:

首先我们需要知道小数转化为二进制。假定有分数a/b(a<b),要将它转化为k进制。我们需要取a * k / b为第

一位。然后让a = a * k % b.重复以上步骤,直到a* k % b == 0;

a * k % b 一直不等于0那么就说明这个分数是无限小数。

如果判断 a * k % b 一直不等于0在代码层面是可行的,但是时间复杂度复杂度会比较高,而且从逻辑上说

也比较麻烦。

我们可以换一种思路,我们只要判断a * k % b 在小数转化为二进制这个过程是否能等于0即可。

 

 

 

 

 

相关文章: