Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

การนับจำนวนเฉพาะที่ลดเหลือ 1 ภายในช่วงโดยใช้ JavaScript


ปัญหา

เราจำเป็นต้องเขียนฟังก์ชัน 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