首页 > 解决方案 > Javascript:查找数字的所有根整数

问题描述

只是为了好玩,我正在尝试编写一个函数来告诉我一个数字的所有根。我不确定数学术语,但我想要这个数字,它的力量等于给定的数字。

例如,给定数字 1024 我会得到 {2:10, 4:5, 32:2}(即:)2^10 = 4^5 = 32^2 = 1024

我实际上写了一个工作算法,但它遇到了浮点精度问题,我想知道是否有更好的方法。

这是我现在拥有的功能:

function findRoots(n) {
    let result = {}
    for (root = Math.floor(Math.sqrt(n)); root >= 2; root--) {
        let test = n ** (1 / root)
        if (Number.isInteger(test)) {
            result[test] = root
        }
    }
    return result
}

输出是一个对象,其中属性名称是根,值是指数。

但是,例如,如果我给它 16807(应该给我{7:5}),我什么也得不到,因为我用来测试根的方法在浮点精度上阻塞(即16807 ** (1/5) == 7.000000000000001)。

除了降低一些精度之外,有没有办法处理浮点数?

标签: javascript

解决方案


您可以使用

if (Math.round(test) ** root == n) {

代替

if (Number.isInteger(test)) {

证明

测试 = n^{1/root}

\Rightarrow {测试}^{根} = n

\Rightarrow round({test})^{root} = n \Leftrightarrow {test} \in N

由于我们使用Math.round(test),所以舍入误差test不会造成任何问题。


推荐阅读