使用 JavaScript 计算范围内减少到 1 的素数

问题

我们需要编写一个 JavaScript 函数,该函数接受两个数字的范围数组。我们的函数应该返回这些素数的计数,其数字的平方和最终产生 1。

例如,23 是一个质数,并且,

22 + 32 = 13

12 + 32 = 10

12 + 02 = 1

因此,23 应该是一个有效数字。

示例

以下是代码 -

const range = [2, 212];

String.prototype.reduce = Array.prototype.reduce;

const isPrime = (n) => {

   if ( n<2 ) return false;

   if ( n%2===0 ) return n===2;

   if ( n%3===0 ) return n===3;

   for ( let i=5; i*i<=n; i+=4 ) {

      if ( n%i===0 ) return false;

         i+=2;

      if ( n%i===0 ) return false;

   }

   return true;

}

const desiredSeq = (n) => {

   let t=[n];

   while ( t.indexOf(n)===t.length-1 && n!==1 )

   t.push(n=Number(String(n).reduce( (acc,v) => acc+v*v, 0 )));

   return n===1;

}

const countDesiredPrimes = ([a, b]) => {

   let res=0;

   for ( ; a<b; a++ )

      if ( isPrime(a) && desiredSeq(a) )

      res++;

   return res;

}

console.log(countDesiredPrimes(range));

输出结果
12

以上是 使用 JavaScript 计算范围内减少到 1 的素数 的全部内容, 来源链接: utcz.com/z/335570.html

回到顶部