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

C++ দিয়ে একটি রেঞ্জে দেওয়া ডিজিটাল রুট (Digital Root) वाले সংখ্যা গণনা

একটি সংখ্যার ডিজিটাল রুট (Digital Root) বের করতে হলে তার ডিজিটগুলোর যোগফল নিতে হয়; যদি যোগফল একক ডিজিট হয়, তবে সেটিই ডিজিটাল রুট। এই টিউটোরিয়ালে একটি সমস্যা আলোচনা করা হয়েছে যেখানে একটি সংখ্যা রেঞ্জ (range) এবং একটি পূর্ণসংখ্যা X দেওয়া আছে, এবং আমাদের গণনা করতে হবে রেঞ্জে কতগুলো সংখ্যার ডিজিটাল রুট X, যেখানে X একটি একক ডিজিট সংখ্যা। উদাহরণ −

ইনপুট: l = 13, r = 25, X = 4 আউটপুট: 2 ব্যাখ্যা: রেঞ্জ (13, 25)-এ ডিজিট সাম ৪ वाले সংখ্যা: ১৩ এবং ২২।
ইনপুট: l = 11, r = 57 আউটপুট: 6
সমাধানের পদ্ধতি সহজ পদ্ধতি

সহজ পদ্ধতিতে, l থেকে r পর্যন্ত সব সংখ্যা ট্রাভার্স করে চেক করা যাবে তার ডিজিট সাম X-এর সমান কিনা। কিন্তু এতে টাইম কমপ্লেক্সিটি O(N) হবে, যেখানে N হলো রেঞ্জে মোট সংখ্যা।

দক্ষ পদ্ধতি

রেঞ্জে ডিজিটাল রুট X वाली সংখ্যা বের করতে, আমাদের প্রতিটি সংখ্যার ডিজিট সাম চেক করতে হবে যে সেটি K-এর সমান কিনা। ডিজিট সাম সবসময় num % ৯ (nine) এর সমান হয় এবং রিমেইন্ডার ০ হলে সেটি ৯ হয়। সুতরাং, যদি X = 9 হয়, তবে সেটিকে ০ मानতে হবে।

पूरा রেঞ্জকে ৯ দিয়ে ভাগ করে ৯-এর গ্রুপ (group) এ ভাগ করলে, প্রতিটি গ্রুপে ঠিক একটি সংখ্যা থাকবে যার মডুলো ৯ X-এর সমান। এরপর বাকি যেসব সংখ্যা গ্রুপে পড়েনি সেগুলো আলাদা করে চেক করব num % 9 = X কিনা।

উদাহরণ

উপরোক্ত পদ্ধতির C++ কোড

#include <bits/stdc++.h> #define ll long long int using namespace std; int main(){     int l = 13;     int r = 25;     int X = 4;     if (X == 9) X = 0;     // রেঞ্জে মোট সংখ্যা     int total = r - l + 1;     // ৯-এর সর্বোচ্চ গ্রুপে ভাগ     int groups = total / 9;     // N গ্রুপে Nটি সংখ্যা থাকবে যাদের মডুলো ৯ = X     int result = groups;     // বাকি সংখ্যা (left out) চেক     int left_out = total % 9;     // প্রতিটি বাকি সংখ্যা আলাদা চেক     for (int i = r; i > r - left_out; i--) {         int rem = i % 9;         if (rem == X) result++;     }     cout << "Total Numbers in a Range( l, r ) with given Digital Root(X) are: " << result;     return 0; }
আউটপুট
Total Numbers in a Range( l, r ) with given Digital Root(X) are: 2
উপসংহার

এই টিউটোরিয়ালে আমরা একটি সংখ্যা রেঞ্জ এবং ডিজিটাল রুট নিয়ে সমস্যা আলোচনা করেছি। আমাদের রেঞ্জে ডিজিটাল রুট X वाली সব সংখ্যা বের করতে হয়েছে। আমরা একটি সহজ পদ্ধতি এবং একটি দক্ষ পদ্ধতি দেখিয়েছি যেখানে সংখ্যাগুলো ৯-এর গ্রুপে ভাগ করা হয়েছে। প্রতিটি গ্রুপে একটি সংখ্যা থাকে যার ডিজিটাল রুট X। এই সমস্যার C++ প্রোগ্রামও দেওয়া আছে যা C, Java, Python ইত্যাদি ভাষায়ও করা যাবে। আশা করি আপনি এই টিউটোরিয়ালটি সহায়ক পাবেন।

  1. C++-এ নির্দিষ্ট রেঞ্জে ফ্যাক্টোরিয়াল সংখ্যা গণনা

  2. C++-এ দেওয়া দৈর্ঘ্যের কমপোজিট (Composite) সংখ্যার রেঞ্জ খুঁজে বের করা

  3. C++-এ দেওয়া ইন্ডেক্সের Nটি ফিবোনাচ্চি সংখ্যার GCD বের করা

  4. সি++ প্রোগ্রাম: দিয়ে गये রেঞ্জের র‍্যান্ডমাইজড সিকোয়েন্স জেনারেট করা