>  기사  >  웹 프론트엔드  >  JavaScript 재미있는 질문: 디오판틴 방정식

JavaScript 재미있는 질문: 디오판틴 방정식

黄舟
黄舟원래의
2017-01-22 15:00:151651검색

수학에서 디오판토스 방정식은 일반적으로 두 개 이상의 미지수가 포함된 다항식 방정식으로 정수 해가 필요합니다.

다음 디오판토스 방정식이 주어졌을 때 모든 양의 정수 해를 구하십시오.

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;  
}

위 내용은 자바스크립트 재미있는 질문: 디오판틴 방정식의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.