সমস্যা
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা দুটি নম্বরের রেঞ্জ অ্যারে নেবে। ফাংশনটি এমন প্রাইম নম্বরের কাউন্ট রিটার্ন করবে যাদের ডিজিটের বর্গ যোগফল (squared sum of digits) চূড়ান্তভাবে ১ দিয়ে ফলাফল দেয়।
উদাহরণস্বরূপ, ২৩ একটি প্রাইম নম্বর এবং:
2² + 3² = 13 1² + 3² = 10 1² + 0² = 1
অতএব, ২৩ একটি বৈধ নম্বর।
উদাহরণ
নিচে কোড দেওয়া হলো:
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