কম্পিউটার টিউটোরিয়াল

C++-এ একটি সংখ্যাকে বারবার ডিভাইজার দিয়ে ভাগ করে ম্যাক্সিমাম সাম


একটি পূর্ণসংখ্যা N দেওয়া আছে। N কে বারবার এর ডিভাইজার দিয়ে ভাগ করে ১ হয়ে যাওয়া পর্যন্ত সব ভাগফলের যোগফলের ম্যাক্সিমাম মান বের করতে হবে।

উদাহরণ: N = 12 -> আউটপুট: ২২

ব্যাখ্যা: ১২/২=৬, ৬/২=৩, ৩/৩=১। সাম = ১২+৬+৩+১ = ২২।

সমাধান: প্রতিবার 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++-এ অ্যারেতে সর্বোচ্চ ইকুইলিব্রিয়াম যোগফল