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