কম্পিউটার

C++ এ একটি ভাজক দ্বারা বারবার N ভাগ করার পর সর্বোচ্চ যোগফল


এই সমস্যায়, আমাদের একটি পূর্ণসংখ্যা 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

  1. C++ এ বাইনারি ট্রিতে সর্বাধিক সর্পিল যোগফল

  2. C++ এ একটি উল্টানো ত্রিভুজে সর্বাধিক পাথ যোগফল

  3. C++ এ একটি ত্রিভুজে সর্বাধিক পাথ যোগফল

  4. C++ এ একটি অ্যারেতে সর্বোচ্চ ভারসাম্যের যোগফল