如果数字是十进制,如何检查某个数字是否可以表示为x ^ y?

时间:2018-08-30 17:27:27

标签: algorithm math

在编程采访中有人问我这个问题。

如果数字是16、25、100之类的整数,我们可以得出是否可以使用对数或素数或其他方式用x ^ y表示数字。 但是,如果数字是0.4或0.002或任何其他十进制数字,该怎么办?

请帮助我找到一种方法。谢谢:)

3 个答案:

答案 0 :(得分:2)

如果x是一个整数,而y是一个非负整数,则x^y是一个整数(如果我们忽略了模棱两可的情况0^0)。如果我们允许y为负整数,则x^y也表示为1/ (x^(-y)),它是非负整数的倒数(如果我们忽略{{ 1}}等。

因此,如果给定的0^-1值不是整数,请检查其倒数。该整数必须为整数,并且可分解为x^yx^y的整数。{p>

我在这里假设xy必须是整数。如果不是,则可以使用x,其中y是所需的结果。例如,如果给定a^1,则可以使用a。但是,如果我们对0.40.4^1有整数限制,那么您会看到x不是整数,y也不是整数。因此,这不能分解。给0.4,我们尝试它的倒数2.5,然后看到它的唯一分解是0.002,所以500的唯一分解是500^1


如果在编码采访中被问到这个问题,我会再说一分。某些数字,例如0.002,无法在标准浮点变量中精确表示。因此,取其倒数可能不会导致整数,即使期望如此。例如,对于500^-1,这是正确的:在Python 3.6.4中取其倒数不会给出0.002。更好的例子是x=1/49。其倒数应为49,但实际上为x=0.00016。因此,分解这些数字更加困难。这会影响将数字输入到例程的方式。例如,在Python中,如果未将“十进制数”作为浮点值输入,而是将其作为字符串或6250模块的十进制值或{{ 1}}模块。这样可以使十进制数的值保持准确,并且例程可以正确地检查倒数是否为整数。

答案 1 :(得分:1)

假设x,y必须是整数,则可以这样操作:

让我们以0.25

为例

将其重写为25*10^(-2)

现在写25 as 5^2

现在您有

0.25 = (5^2)(10^-2)
                  = ((5^-1)^(-2))(10^-2)
                  = ((5^-1)*(10))^-2
                  = 2^-2

如果您具有5、10的相等功率(绝对值),则可以这样做。

另一个例子:

0.5 = ( 5^1 )* ( 10^-1)
                       = (( 5^-1)^-1)*(10^-1)
                       = ((5^-1)*(10))^-1
                       = 2^-1

因此,一种方法是首先查看是否可以在小数和零之后写数字,例如0.25中的25,0.008中的8,实际上称为实数的“尾数”,即x ^ y-如果x ^ y中的y等于绝对值的10的幂,则可以将其写为x ^ y,其中x ,y是y为负的整数。

答案 2 :(得分:0)

重复乘以10 ^ y直到数字变为整数。这等于将小数点重复移动y个位置,直到最后一个有效数字之后。

例如

0.4 => 40:不是正方形

0.00002 => 0.002 => 0.2 => 20:不是正方形

0.0081 => 0.81 => 81:正方形