কম্পিউটার

C++-এ n-এর সমস্ত ভাজকের মধ্যে অঙ্কের বৃহত্তম যোগফল খুঁজুন


এই সমস্যায়, আমরা একটি পূর্ণসংখ্যা n দেওয়া হয়. আমাদের কাজ হল n এর সমস্ত ভাজকের মধ্যে অঙ্কের বৃহত্তম যোগফল খুঁজে বের করা।

সমস্যা বর্ণনা: এখানে, আমরা n সংখ্যাটির ভাজক পাব যার অঙ্কের যোগফল সবচেয়ে বড়।

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

ইনপুট: 18

আউটপুট:

ব্যাখ্যা:

18 এর সমস্ত ভাজক হল 1, 2, 3, 6, 9, 18।

সর্বাধিক অঙ্কের যোগফল হল 9৷

সমাধান পদ্ধতি

N সংখ্যাটির সমস্ত ভাজক খুঁজুন। তারপর প্রতিটি ভাজকের অঙ্কের যোগফল বের করুন এবং তারপরে সবচেয়ে বড় যোগফল দিয়ে মান ফেরত দিন।

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

উদাহরণ

#include <iostream>
using namespace std;

int calcDigitSum(int n) {
   
   int sum = 0;
   while (n != 0) {
      sum = sum + n % 10;
      n = n/10;
   }
   return sum;
}

int largestDigitSumdivisior(int n) {
   
   int maxSum = 0;
   for (int i = 1; i <= n; i++)
      if (n % i == 0)
      maxSum = max(maxSum, calcDigitSum(i));

   return maxSum;
}

int main() {
   
   int n = 45;
   cout<<"The divisor with largest sum of digits is "<<largestDigitSumdivisior(n)<<endl;
   return 0;
}

আউটপুট

The divisor with largest sum of digits is 9

ভাজক খুঁজে বের করতে এবং এটিকে আরও কার্যকর করার পদ্ধতি পরিবর্তন করে সমাধানটিকে আরও কার্যকর করা যেতে পারে৷

এই সমস্যায়, আমরা sqrt(n) পর্যন্ত পুনরাবৃত্তি করব এবং সমস্ত ভাজক এবং অন্যান্য ভাজক n/div ব্যবহার করে গণনা করব। এটি sqrt(n) এ ভাজক খুঁজতে সময় জটিলতা হ্রাস করে।

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

উদাহরণ

#include <iostream>
using namespace std;

int calcDigitSum(int n) {
   
   int sum = 0;
   while (n != 0) {
      sum = sum + n % 10;
      n = n / 10;
   }
   return sum;
}

int largestDigitSumdivisior(int n) {
   
   int maxSum = 0;
   for (int i = 1; i*i <= n; i++) {

      if (n % i == 0) {
         maxSum = max(maxSum, calcDigitSum(i));
         maxSum = max(maxSum,calcDigitSum(n/i));
      }  
   }
   return maxSum;
}

int main() {
   
   int n = 32;
   cout<<"The divisor with largest sum of digits is "<<largestDigitSumdivisior(n)<<endl;
   return 0;
}

আউটপুট

The divisor with largest sum of digits is 8

  1. C++ এ একটি গাছের মধ্যে সবচেয়ে বড় সাবট্রি সমষ্টি খুঁজুন

  2. C++-এ সমস্ত সাব-সিকোয়েন্সের যোগফলের যোগফল নির্ণয় করুন

  3. C++ এ একটি সংখ্যার ফ্যাক্টরিয়াল সংখ্যার সমষ্টি খুঁজুন

  4. C++ এ একটি অ্যারের সমস্ত স্বতন্ত্র উপসেট (বা পরবর্তী) যোগফল খুঁজুন