Computer >> Máy Tính >  >> Lập trình >> Javascript

Đếm các số nguyên tố giảm xuống 1 trong một phạm vi bằng JavaScript

Vấn đề

Chúng tôi bắt buộc phải viết một hàm JavaScript nhận trong một mảng phạm vi gồm hai số.

Ví dụ, 23 là một số nguyên tố và

22 + 32 = 13
12 + 32 = 10
12 + 02 = 1

Do đó, 23 phải là một số hợp lệ.

Ví dụ

Sau đây là mã -

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));

Đầu ra

12