Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Đếm số nguyên tố quy về 1 trong phạm vi bằng JavaScript


Vấn đề

Chúng ta cần viết một hàm JavaScript nhận vào một mảng phạm vi hai số. Hàm phải trả về số lượng các số nguyên tố mà tổng bình phương các chữ số của chúng cuối cùng cho 1.

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

2^2 + 3^2 = 13 
1^2 + 3^2 = 10 
1^2 + 0^2 = 1

Do đó, 23 là số hợp lệ.

Ví dụ

Dưới đâ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));

Kết quả

12