「回文素数」とは、それ自体が素数であり、その回文もまた別の素数である数です。
例:
13 17 31 37 71 73
これは回文素数列です。
13は素数であり、その回文31も素数です。
17は素数であり、その回文71も素数です。
タスクは次のとおりです:
指定された 2 つの正の整数間のすべての回文素数を検索します。返された配列は、小さいものから大きいものへと並べ替える必要があります。
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; };
さて、材料はすべて準備ができたので、始めましょう!
数値が素数であり、その回文も素数である場合は、左側の正の整数から右側の正の整数へのトラバースを開始し、それを配列に追加します。
ただし、注意すべき点が 1 つあります。それは、数値が素数であり、かつ回文そのものである場合、それは機能しないということです。スキップしなきゃ!
これは「回文素数」の文字通りの意味に近いように思えますが、私たちの質問の意味は、2 つの素数が互いに回文であるということです。
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 中国語 Web サイト (www.php.cn) に注目してください。