ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript の楽しい質問: ディオファントス方程式

JavaScript の楽しい質問: ディオファントス方程式

黄舟
黄舟オリジナル
2017-01-22 15:00:151691ブラウズ

数学におけるディオファントス方程式は、通常 2 つ以上の未知数を含む多項式であり、その整数解が必要です。

次のディオファントス方程式が与えられた場合、そのすべての正の整数解を求めます。

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 は非常に大きな数になる可能性があり、網羅的手法を使用すると効率が非常に低くなるためです。

この定数を分解して 2 つの項に因数分解してみることができます。

たとえば、N=24 を 2 つの項に分解すると、次の可能性があります:

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

これらを取り上げます。式が適用されます:

x - 2y = 1

x + 2y = 24

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

x - 2y = 2

x + 2y = 12

......

これは、2 変数の線形方程式を求めることに変換されます。

最後に、正の整数の解を選択するだけです。

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 中国語 Web サイト (www.php.cn) に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。