এই সমস্যায়, আমাদের একটি পূর্ণসংখ্যা N দেওয়া হয়েছে। আমাদের কাজ হল এমন একটি প্রোগ্রাম তৈরি করা যা C++ এ একটি ভাজক দ্বারা বারবার N ভাগ করার পরে সর্বাধিক যোগফল খুঁজে পাবে।
প্রোগ্রামের বিবরণ − আমরা N সংখ্যাটিকে পুনরাবৃত্তভাবে ভাগ করব যতক্ষণ না এটি একটি হয়ে যায় এবং তারপরে সমস্ত ভাজককে যোগ করব এবং সমস্ত ভাজকের সর্বাধিক বের করব৷
সমস্যাটি বোঝার জন্য একটি উদাহরণ দেওয়া যাক,
ইনপুট − N =12
আউটপুট − 22
ব্যাখ্যা − আসুন সংখ্যাটিকে পুনরাবৃত্তিমূলকভাবে ভাগ করি এবং যোগফল বের করি।
Division 1: 12/2 = 6 Division 2: 6/2 = 3 Division 3: 3/3 = 1 Sum = 12+6+3+1 = 22
এই সমস্যাটি সমাধান করার জন্য, আমরা N-এর ক্ষুদ্রতম ভাজক দ্বারা N কে ভাগ করে ব্যক্তিগত মানগুলির সর্বাধিক করে সর্বোচ্চ যোগফল খুঁজে পাব।
উদাহরণ
আমাদের সমাধানের কাজটি ব্যাখ্যা করার জন্য প্রোগ্রাম,
#include <bits/stdc++.h> using namespace std; int smallestDivisor(int n){ int mx = sqrt(n); for (int i = 2; i <= mx; i++) if (n % i == 0) return i; return n; } int calculateMaxSum(int n) { long long maxSum = n; while (n > 1) { int divisor = smallestDivisor(n); n /= divisor; maxSum += n; } return maxSum; } int main(){ int N = 12; cout<<"The maximum sum after repeatedly dividing "<<N<<" by divisor is "<<calculateMaxSum(N); return 0; }
আউটপুট
The maximum sum after repeatedly dividing 12 by divisor is 22