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

C++ দিয়ে B বেসে N!-এর末尾 শূন্যের সংখ্যা বের করা

এই আর্টিকেলে আমরা বুঝব কিভাবে একটি দিয়ে হয়ে সংখ্যা N-এর ফ্যাক্টোরিয়ালকে B বেসে রিপ্রেজেন্ট করলে তার শেষে কতগুলো শূন্য থাকে। উদাহরণ −

ইনপুট: N = 7, Base = 2 আউটপুট: 4 ব্যাখ্যা: fact(7) = 5040 (বেস ১০) এবং 1001110110000 (বেস ১৬) যাতে ৪টি শেষ শূন্য।
ইনপুট: N = 11, Base = 5 আউটপুট: 2 ব্যাখ্যা: fact(11) = 39916800 (বেস ১০) এবং 40204314200 (বেস ১৬) যাতে ২টি শেষ শূন্য।

প্রথমে যেকোনো ডেসিমাল সংখ্যাকে একটি বেস থেকে অন্য বেসে কনভার্ট করার প্রক্রিয়া জানি। উদাহরণস্বরূপ (5040)₁₀ কে (?)₂-তে কনভার্ট করা।

C++ দিয়ে B বেসে N!-এর末尾 শূন্যের সংখ্যা বের করা

অর্থাৎ সংখ্যাকে ২ দিয়ে ভাগ করে ভাগশেষ রাখা যতক্ষণ না সংখ্যা আর ভাগ করা যায় না। ফলাফল হবে ভাগশেষগুলো উল্টা ক্রমে।

ফলাফলে আমরা ৪টি শেষ শূন্য পাই, যা ২ দিয়ে ভাগ দিয়ে ভাগশেষ ০ পাওয়ায় হয়েছে। ৫০৪০-এর প্রাইম ফ্যাক্টরাইজেশন = ২⁴ × ৫৬৭১১ × ৩৩৮১ × ১৮১, অর্থাৎ ২ তার ৪ বার ভাগ করতে পেরেছে ভাগশেষ ০ দিয়ে, যা শেষ শূন্যের সংখ্যার সমান। এইভাবে আমরা শেষ শূন্যের সংখ্যা বের করতে পারি।

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

উপরে আমরা শেষ শূন্যের সংখ্যা বের করার পদ্ধতি আলোচনা করেছি। আমাদের ফ্যাক্টোরিয়াল N-এ বেস B-এর সর্বোচ্চ ঘাত বের করতে হবে। ধরুন বেস B = ১৪, তবে ১৪ বেস ১৪-এ ১০ হিসেবে রিপ্রেজেন্ট হবে, অর্থাৎ (14)₁₀ = (10)₁৪। এটিকে লেজান্ড্রের সূত্র (Legendre's formula) বলা হয়।

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

নিচে দিয়ে गयी C++ সিনট্যাক্স ব্যবহার করে এই সমস্যা সমাধান করা যায় −

উদাহরণ
#include <bits/stdc++.h> using namespace std; vector < pair < int, int >> primeFactorsofBase(int Base) {     // প্রাইম ফ্যাক্টর ও তার অকরেন্স রাখার ভেক্টর     vector < pair < int, int >> factors;     for (int i = 2; Base != 1; i++) {       if (Base % i == 0) {           int count = 0;           while (Base % i == 0) {             Base = Base / i;             count++;           }           factors.push_back (make_pair (i, count));       }     }     return factors; } int main () {     int N = 11, Base = 5;     // ফ্যাক্টোরিয়াল N-এ বেস B-এর সর্বোচ্চ ঘাত বের করা     vector < pair < int, int >> prime_factors;     // প্রাইম ফ্যাক্টর বের করা primeFactorsofBase() ফাংশন দিয়ে     prime_factors = primeFactorsofBase(Base);     int result = INT_MAX;     for (int i = 0; i < prime_factors.size (); i++) {       // ন্যূনতম ঘাত বের করা       int count = 0;       int r = prime_factors[i].first;       while (r <= N) {           count += (N / r);           r = r * prime_factors[i].first;       }       result = min (result, count / prime_factors[i].second);     }     // শেষ শূন্যের সংখ্যা প্রিন্ট     cout << "Number of trailing zeroes: " << result;     return 0; }
আউটপুট
Number of trailing zeroes: 2
কোডের ব্যাখ্যা
  • ভেক্টর ব্যবহার করে বেসের সর্বোচ্চ ঘাত বের করা।
  • সর্বোচ্চ ঘাত বের করতে প্রাইম ফ্যাক্টর বের করে ভেক্টরে রাখা।
  • বেসের সব প্রাইম ফ্যাক্টরের ন্যূনতম ঘাত বের করা।
  • শেষে ফলাফল প্রিন্ট করা।
উপসংহার

এই আর্টিকেলে আমরা B বেসে ফ্যাক্টোরিয়াল N-এর শেষ শূন্যের সংখ্যা বের করার সমস্যা সমাধান করেছি লেজান্ড্রের সূত্র ব্যবহার করে। আমরা C++ কোডও লিখেছি। এই কোড Java, C, Python ইত্যাদি ভাষায়ও লিখা যায়। আশা করি আপনি এই আর্টিকেলটি সহায়ক পাবেন।

  1. C++ দিয়ে বেস ১৬-এ N!-এর শেষ শূন্যের সংখ্যা বের করা

  2. C++ দিয়ে একটি স্ট্রিংয়ের সাবস্ট্রিং-এর সংখ্যা বের করা

  3. C++-এ ট্রেন স্টপেজ স্টেশন সংখ্যা বের করুন

  4. C++-এ সেটে রিফ্লেক্সিভ রিলেশন সংখ্যা বের করুন