>  기사  >  웹 프론트엔드  >  재미있는 JavaScript 질문: 소수의 차이점

재미있는 JavaScript 질문: 소수의 차이점

黄舟
黄舟원래의
2017-02-04 15:09:441303검색

소수는 규칙적으로 분포하지 않으며 이는 인접한 두 소수의 차이로 반영될 수 있습니다.
2와 3의 차이는 1, 3과 5의 차이는 2, 5와 7의 차이는 2이지만, 7과 11의 차이는 4입니다.
얼핏 보면 패턴을 찾을 수 없는데, 그게 사실이에요.
2와 50 사이에서 차이가 2인 다음과 같은 인접한 소수 쌍을 찾을 수 있습니다.
3-5, 5-7, 11-13, 17-19, 29-31, 41-43
분명히 위 조건을 만족하는 첫 번째 소수 쌍은 3~5입니다.
그렇다면 보다 일반적인 경우 m에서 n까지 g 간격을 두고 인접한 소수의 첫 번째 쌍은 무엇입니까?
함수 프로토타입은 다음과 같습니다.
gap(g, m, n)

예제는 다음과 같습니다.

gap(2, 5, 7) // --> [5, 7]  
gap(4, 130, 200) // --> [163, 167]  
gap(2, 5, 5) // --> null

반드시 다음과 같아야 합니다. 소수에 인접한 g 차이를 충족하는 첫 번째 위상 쌍.
찾지 못하면 null을 반환합니다.
소수를 다루는 이런 유형의 질문에는 필연적으로 소수를 결정하는 함수를 도입해야 합니다. 때로는 이 함수가 ECMA 표준에 포함될 수 있다면 얼마나 좋을까 하는 생각이 듭니다.
그러나 다양성을 고려하면 이 isPrime 메소드의 적용 시나리오는 실제로 약간 좁고 Number.prototype에 바인딩하는 데 적합하지 않으므로 다시 질문할 때 떼어내고 붙여넣기만 하면 됩니다. 그리고 또 땀^_^.
이 질문 자체는 어렵지 않습니다. 루프에서 조건을 충족하는 소수 쌍을 만나면 반환됩니다. 조건을 충족하는 소수 쌍이 없으면 null을 반환합니다.

Number.prototype.isPrime = function(){    
    var maxFactor = Math.floor(Math.sqrt(this));    
        for(var i=2;i<=maxFactor;i++){    
            if(this % i === 0){    
                return false;    
            }    
        }    
    return true;    
};    
  
function gap(g, m, n) {  
    var firstPrime;  
    var secondPrime;  
    for(var i=m;i<=n;i++){  
        if(i.isPrime()){  
            firstPrime = secondPrime;  
            secondPrime = i;  
            if(secondPrime - firstPrime === g){  
                return [firstPrime,secondPrime];  
            }   
        }  
    }  
    return null;  
}

위 내용은 JavaScript 흥미로운 질문: 소수의 차이에 대한 내용입니다. 더 많은 관련 내용은 PHP 중국어 웹사이트(www.php.cn)를 참고하세요!


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