সমস্যা
দুই সংখ্যা দেওয়া আছে: n (ডিভাইজার) এবং b (বাউন্ড)। এমন সবচেয়ে বড় পূর্ণসংখ্যা num খুঁজে বের করতে হবে যাতে:
numnদিয়ে বিভাজ্যnum≤bnum> 0
উদাহরণ কোড
const n = 14;
const b = 400;
const biggestDivisible = (n, b) => {
let max = 0;
for (let j = n; j <= b; j++) {
if (j % n == 0 && j > max) {
max = j;
}
}
return max;
};
console.log(biggestDivisible(n, b));
আউটপুট
392
ব্যাখ্যা
- লুপ
nথেকেbপর্যন্ত চলে। - যদি
j % n === 0(বিভাজ্য) এবংj > maxহয়, তবেmaxআপডেট করা হয়। - ফলাফল: ১৪ দিয়ে বিভাজ্য এবং ৪০০-এর নিচে সবচেয়ে বড় সংখ্যা ৩৯২ (১৪ × ২৮)।
অপ্টিমাইজড সমাধান (O(1) - লুপ ছাড়া)
গাণিতিক সূত্র ব্যবহার করে সরাসরি বের করা যায়:
const biggestDivisibleOptimized = (n, b) => {
if (n <= 0) return 0; // ভ্যালিডেশন
return Math.floor(b / n) * n;
};
console.log(biggestDivisibleOptimized(14, 400)); // 392
console.log(biggestDivisibleOptimized(7, 50)); // 49
console.log(biggestDivisibleOptimized(3, 2)); // 0 (কোনো পজিটিভ মাল্টিপ্লা নেই)
লজিক: b কে n দিয়ে ভাগ দিয়ে ফ্লোর নিলে সর্বোচ্চ মাল্টিপ্লায়ার পাওয়া যায়, তারপর n দিয়ে গুণ করলে সংখ্যাটি পাওয়া যায়।
এজ কেস হ্যান্ডলিং
const safeBiggestDivisible = (n, b) => {
if (n <= 0 || b <= 0) return 0;
const result = Math.floor(b / n) * n;
return result > 0 ? result : 0;
};