当前位置:Gxlcms > JavaScript > JavaScript趣题:丢番图方程

JavaScript趣题:丢番图方程

时间:2021-07-01 10:21:17 帮助过:50人阅读

在数学中,丢番图方程是一种多项式方程,通常存在两个或多个未知数,要求出它们的整数解。

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

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

......

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

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

  1. function solequa(n) {
  2. var result = [];
  3. for(var a=1,b=n;a<=b;a++){
  4. if(n % a == 0){
  5. b = n / a;
  6. var x = (a + b) / 2;
  7. var y = (b - a) / 4;
  8. if(parseInt(x) == x && parseInt(y) == y && x >=0 && y >= 0){
  9. result.push([x,y]);
  10. }
  11. }
  12. }
  13. return result;
  14. }

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

人气教程排行