ধরুন আমাদের একটি প্রদত্ত সংখ্যা নিখুঁত সংখ্যা কিনা তা পরীক্ষা করতে হবে। একটি সংখ্যাকে একটি নিখুঁত সংখ্যা বলা হয় যখন এটি নিজেই ছাড়া তার সমস্ত ধনাত্মক ভাজকের যোগফলের সমান হয়। n সংখ্যাটি 1^8 এর মধ্যে থাকবে।
সুতরাং, যদি ইনপুটটি 28 এর মত হয়, তাহলে আউটপুটটি True হবে, কারণ এর ভাজকের যোগফল − 1 + 2 + 4 + 7+ 14 =28।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
যেহেতু সংখ্যাগুলি 10^8 পরিসরে, সেখানে শুধুমাত্র কয়েকটি নিখুঁত সংখ্যা আছে, যদি প্রদত্ত ইনপুটটি সেই সেটে থাকে, তাহলে উত্তর হবে সত্য, অন্যথায় মিথ্যা। নিখুঁত সংখ্যা হল 6, 28, 496, 8128 এবং 33550336৷
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <bits/stdc++.h> using namespace std; class Solution { public: bool checkPerfectNumber(int num) { set<int> set={6,28,496,8128,33550336}; return set.find(num)!=set.end(); } }; main(){ Solution ob; cout << (ob.checkPerfectNumber(28)); }
ইনপুট
28
আউটপুট
1