欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

JavaScript趣题:丢番图方程

程序员文章站 2022-03-10 12:53:00
...
在数学中,丢番图方程是一种多项式方程,通常存在两个或多个未知数,要求出它们的整数解。

已知如下的丢番图方程,求它所有的正整数解。

x² - 4y² = n

x和y是未知数,n是一个给定的常量。x,y的解集将使用如下的嵌套数组展示:

[[x1, y1], [x2, y2] ....]

下面是一些例子:

sol_equa(90005) --> [[45003, 22501], [9003, 4499], [981, 467], [309, 37]]

sol_equa(90002) --> []

咋们来看看怎么解决这个问题,先看这个等式的左边,x² - 4y²,你第一眼就有种感觉,它可以转化为(x - 2y) * (x + 2y),当你想到这一步,就迈出了第一步。

因为等式右边的常量N,它有可能是一个很大的数,如果用穷举法,效率是很低的。

我们可以尝试分解这个常量,把它因式分解成两项。

比方说,N=24,分解成两项有如下的可能:

[1,24] , [2,12] , [3,8] , [4,6]

我们拿这些可能往式子上套:

x - 2y = 1

x + 2y = 24

--------------

x - 2y = 2

x + 2y = 12

......

这样就转化成了求二元一次方程。

最后,我们选取其中的正整数解即可。

function solequa(n) {  
    var result = [];  
    for(var a=1,b=n;a<=b;a++){  
        if(n % a == 0){  
            b = n / a;  
            var x = (a + b) / 2;  
            var y = (b - a) / 4;  
            if(parseInt(x) == x && parseInt(y) == y && x >=0 && y >= 0){  
                result.push([x,y]);  
            }  
        }  
    }  
    return result;  
}

以上就是 JavaScript趣题:丢番图方程的内容,更多相关内容请关注PHP中文网(www.php.cn)!