দুটি পূর্ণসংখ্যা n এবং k দেওয়া আছে। রেঞ্জ [1, n]-এ থেকে সব বিজোড় সংখ্যা বাদ দিয়ে (অর্থাৎ শুধু জোড় সংখ্যা রেখে) k-তম স্মলেস্ট সংখ্যা বের করতে হবে।
উদাহরণ
ইনপুট: n = 12, k = 4
জোড় সংখ্যাগুলো: 2, 4, 6, 8, 10, 12
৪র্থ স্মলেস্ট: 8 → আউটপুট: 8
গাণিতিক সমাধান (O(1))
জোড় সংখ্যাগুলো হচ্ছে: 2, 4, 6, 8, ... = 2 × 1, 2 × 2, 2 × 3, ...
k-তম জোড় সংখ্যা = 2 × k
শর্ত: 2k ≤ n (অর্থাৎ k ≤ n/2)।
C++ প্রোগ্রাম
#include <bits/stdc++.h>
using namespace std;
int main() {
int n = 124, k = 12;
if (n >= 2 * k) {
cout << "kth smallest number is " << (2 * k);
} else {
cout << "kth smallest number cannot be found";
}
return 0;
}
আউটপুট
kth smallest number is 24
ব্যাখ্যা
n=124, k=12→2×12=24 ≤ 124→ মানible।- যদি
k > n/2হয়, তবে রেঞ্জে তত জোড় সংখ্যা নেই। - টাইম:
O(1), কোনো লুপ/অ্যারে লাগে না।
সামান্যীকরণ
যেকোনো আর্থিক সিকোয়েন্স (AP) এর k-তম টার্ম: a + (k-1)d। এখানে a=2, d=2 → 2k।