소수는 규칙적으로 분포하지 않으며 이는 인접한 두 소수의 차이로 반영될 수 있습니다.
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)를 참고하세요!