JavaScript趣题:丢番图方程
程序员文章站
2022-04-04 08:03:05
...
在数学中,丢番图方程是一种多项式方程,通常存在两个或多个未知数,要求出它们的整数解。
已知如下的丢番图方程,求它所有的正整数解。
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)!
上一篇: c程序中宏展开是在什么时候进行的?