একটি সংখ্যা কতগুলো পূর্ণসংখ্যা দিয়ে বিভাজ্য (ফ্যাক্টর) সেটি গণনা করা।
উদাহরণ
12 এর ফ্যাক্টর: 1, 2, 3, 4, 6, 12 মোট: ৬টি
অপ্টিমাইজড সমাধান (O(√n))
const countFactors = (num) => {
if (num <= 0) return 0;
if (num === 1) return 1;
let count = 0;
const sqrt = Math.sqrt(num);
for (let i = 1; i <= sqrt; i++) {
if (num % i === 0) {
if (i === sqrt) {
count += 1; // পারফেক্ট স্কয়ার, রুট একবার কাউন্ট
} else {
count += 2; // i এবং num/i দুটি ফ্যাক্টর
}
}
}
return count;
};
// টেস্ট
console.log(countFactors(12)); // 6 (1,2,3,4,6,12)
console.log(countFactors(2)); // 2 (1,2)
console.log(countFactors(454)); // 4 (1,2,227,454)
console.log(countFactors(99)); // 6 (1,3,9,11,33,99)
console.log(countFactors(36)); // 9 (1,2,3,4,6,9,12,18,36)
ব্যাখ্যা
- √n পর্যন্ত লুপ: ফ্যাক্টর জোড়ায় আসে (i, n/i)
- পারফেক্ট স্কয়ার: রুট দিয়ে একবার কাউন্ট
- প্রাইম ফ্যাক্টরাইজেশন দিয়ে: O(√n) এ ফ্যাক্টর পাওয়া যায়, তারপর কাউন্ট = (e₁+1)(e₂+1)...
প্রাইম ফ্যাক্টরাইজেশন দিয়ে কাউন্ট
const countFactorsPrime = (num) => {
if (num <= 0) return 0;
if (num === 1) return 1;
let n = num;
let count = 1;
for (let p = 2; p * p <= n; p++) {
let exp = 0;
while (n % p === 0) {
exp++;
n /= p;
}
if (exp > 0) count *= (exp + 1);
}
if (n > 1) count *= 2; // বাকি প্রাইম ফ্যাক্টর
return count;
};
উৎপাদন
6 2 4 6