• 技术文章 >web前端 >js教程

    JavaScript趣题:丢番图方程

    黄舟黄舟2017-01-22 15:00:15原创850
    在数学中,丢番图方程是一种多项式方程,通常存在两个或多个未知数,要求出它们的整数解。

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

    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中文网(m.sbmmt.com)!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:JavaScript趣题:螺旋矩阵 下一篇:JavaScript趣题:多维数组初始化
    php培训_php实战培训【立即报名】-php中文网第20期

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 一篇搞定JavaScript DOM详细操作• 深入聊聊JavaScript• JavaScript迭代器知识点总结• 11个可以提升效率的chrome调试技巧• 简单了解JavaScript数据结构与算法之栈
    1/1

    PHP中文网