ধরুন আমাদের একটি সংখ্যা আছে। আমাদের এটিকে দুটি প্রচুর সংখ্যার যোগফল হিসাবে প্রকাশ করতে হবে, যদি হ্যাঁ, সংখ্যাগুলি প্রিন্ট করুন, অন্যথায় -1 প্রিন্ট করুন। একটি সংখ্যাকে বলা হয় প্রচুর সংখ্যা হল সংখ্যার সমস্ত সঠিক ভাজকের যোগফল, যোগফল(n) দ্বারা নির্দেশিত সংখ্যার মানের থেকে বড়৷
এটি সমাধান করার জন্য, আমরা একটি সেটে সমস্ত প্রচুর সংখ্যা সংরক্ষণ করব, এবং প্রদত্ত সংখ্যা n এর জন্য, i =1 থেকে n এর জন্য একটি লুপ চালান এবং n এবং (n – i) প্রচুর আছে কি না তা পরীক্ষা করুন৷
উদাহরণ
#include <iostream> #include <set> #define N 100005 using namespace std; set<int> getAbundantSet() { set<int> abundant_set; for (int i = 1; i < N; i++) { int sum = 1; for (int j = 2; j * j <= i; j++) { if (i % j == 0) { sum += j; if (i / j != j) sum += i / j; } } if (sum > i) abundant_set.insert(i); } return abundant_set; } void representSumAbundant(int number){ set<int> abundant_set = getAbundantSet(); for (int i = 1; i <= number; i++) { if (abundant_set.count(i) && abundant_set.count(number - i)) { cout << i << " " << number - i; return; } } cout << -1; } int main() { int n = 30; representSumAbundant(n); }
আউটপুট
12 18