ধরি আমাদের একটি সংখ্যা n আছে। আমরা চেক করবো যে সংখ্যাটি ২ এর ঘাত (power of 2) কিনা। উদাহরণস্বরূপ, n = 16 হলে আউটপুট হবে true, আর n = 12 হলে false।
লজিক (Logic)
এই সমস্যা সমাধান করতে আমরা বিটওয়াইজ অপারেশন ব্যবহার করব। যেসব সংখ্যা ২ এর ঘাত, তাদের বাইনারি রিপ্রেজেন্টেশনে সবচেয়ে বামের বিট (MSB) হবে ১ এবং বাকি সব বিট ০। তাই যদি আমরা [n AND (n – 1)] অপারেশন করি, তবে ফলাফল ০ আসবে যদি n ২ এর ঘাত হয়।
উদাহরণস্বরূপ, n = 16 এর বাইনারি হল 10000, (n – 1) = 15 এর বাইনারি হল 01111। তাহলে 10000 AND 01111 = 00000 = 0।
উদাহরণ (C প্রোগ্রাম)
#include <stdio.h>
#include <stdbool.h>
bool isPowerOfTwo(int n) {
return (n > 0 && !(n & (n - 1)));
}
int main() {
printf("%s\n", isPowerOfTwo(16) ? "true" : "false");
printf("%s\n", isPowerOfTwo(12) ? "true" : "false");
printf("%s\n", isPowerOfTwo(1) ? "true" : "false");
printf("%s\n", isPowerOfTwo(32) ? "true" : "false");
return 0;
}
ইনপুট
16 12 1 32
আউটপুট
true false true true
ব্যাখ্যা: এই পদ্ধতিটি খুব দ্রুত এবং কার্যকর, কারণ এটি শুধু একটি বিটওয়াইজ অপারেশন ব্যবহার করে। n > 0 চেক করা হয় নেগেটিভ সংখ্যা এবং শূন্য বাদ দিতে।