এই সমস্যায়, আমাদেরকে একটি অ্যারে একটি নম্বর দেওয়া হয়েছে। আমাদের কাজ হল নম্বরটি একটি ইভিল নম্বর নাকি অডিওস নম্বর তা পরীক্ষা করা।
ইভিল নম্বর: এটি একটি ধনাত্মক সংখ্যা যার বাইনারি প্রসারণে 1 এর জোড় সংখ্যা রয়েছে৷
উদাহরণ: 5, 17
অদ্ভুত সংখ্যা: এটি একটি ধনাত্মক সংখ্যা যার বাইনারি প্রসারণে 1 এর বিজোড় সংখ্যা রয়েছে৷
উদাহরণ : 4, 6
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
ইনপুট: N =65
আউটপুট: ইভিল নম্বর
ব্যাখ্যা:
65 এর বাইনারি সম্প্রসারণ :1000001
সমাধান পদ্ধতি:
সমস্যার একটি সহজ সমাধান হল সংখ্যাটির বাইনারি প্রসারণ খুঁজে বের করা এবং তারপর প্রসারণে 1 এর সংখ্যা গণনা করা। সংখ্যাটি জোড় হলে একটি অশুভ সংখ্যা অন্যথায় এটি একটি অডিয়স সংখ্যা।
আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,
উদাহরণ
#include <iostream>
using namespace std;
int isEvilNumber(int n) {
int count = 0;
while (n != 0) {
int r = n % 2;
if(r == 1)
count++;
n = n / 2;
}
if (count % 2 == 0)
return 1;
else
return 0;
}
int main(void)
{
int num = 2049;
if (isEvilNumber(num) )
cout<<"The number "<<num<<" is an Evil Number";
else
cout<<"The number "<<num<<" is an Odious Number";
return 0;
} আউটপুট −
The number 2049 is an Evil Number