"회문 소수"는 그 자체가 소수이고 그 회문이 또 다른 소수이기도 한 숫자입니다.
예:
13 17 31 37 71 73
이것은 회문 소수열입니다.
13은 소수이고, 그 회문 31도 소수입니다.
17은 소수이고, 회문 71도 소수입니다.
작업은 다음과 같습니다.
주어진 두 양의 정수 사이에서 모든 회문 소수를 찾으십시오. 반환된 배열은 작은 것부터 큰 것까지 정렬되어야 합니다.
backwardsPrime(2, 100) // => [13, 17, 31, 37, 71, 73, 79, 97] backwardsPrime(9900, 10000) // => [9923, 9931, 9941, 9967]
'회문 소수'라는 단어를 보면 가장 먼저 떠오르는 것은 소수입니다.
따라서 소수를 판별하는 방법이 있을 것 같습니다:
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; };
그러면 특정 숫자의 회문을 구하는 방법이 있을 것입니다:
Number.prototype.palindrome = function(){ return (this + "").split("").reverse().join("") - 0; };
자, 재료는 모두 준비되었으니 작업을 시작하겠습니다!
왼쪽의 양의 정수에서 오른쪽의 양의 정수로 이동합니다. 숫자가 소수이고 회문도 소수라면 이를 배열에 추가합니다.
그러나 한 가지 주의할 점은 숫자가 소수이자 회문 자체인 경우에는 작동하지 않는다는 것입니다! 건너뛰어야 해!
이것이 "회문 소수"의 문자 그대로의 의미에 더 부합하는 것처럼 보이지만, 우리 질문의 의미는 두 소수가 서로의 회문이라는 것입니다!
function backwardsPrime(start, stop){ var result = []; for(var i=start;i<=stop;i++){ if(i.isPrime() && i.palindrome().isPrime() && i !== i.palindrome()){ result.push(i); } } return result; }
위 내용은 JavaScript 재미있는 질문: 회문 소수의 내용입니다. 더 많은 관련 내용은 PHP 중국어 사이트(www.php.cn)를 참고해주세요!