এই আর্টিকেলে আমরা বুঝব কিভাবে একটি দিয়ে হয়ে সংখ্যা N-এর ফ্যাক্টোরিয়ালকে B বেসে রিপ্রেজেন্ট করলে তার শেষে কতগুলো শূন্য থাকে। উদাহরণ −
ইনপুট: N = 7, Base = 2 আউটপুট: 4 ব্যাখ্যা: fact(7) = 5040 (বেস ১০) এবং 1001110110000 (বেস ১৬) যাতে ৪টি শেষ শূন্য। ইনপুট: N = 11, Base = 5 আউটপুট: 2 ব্যাখ্যা: fact(11) = 39916800 (বেস ১০) এবং 40204314200 (বেস ১৬) যাতে ২টি শেষ শূন্য।
প্রথমে যেকোনো ডেসিমাল সংখ্যাকে একটি বেস থেকে অন্য বেসে কনভার্ট করার প্রক্রিয়া জানি। উদাহরণস্বরূপ (5040)₁₀ কে (?)₂-তে কনভার্ট করা।

অর্থাৎ সংখ্যাকে ২ দিয়ে ভাগ করে ভাগশেষ রাখা যতক্ষণ না সংখ্যা আর ভাগ করা যায় না। ফলাফল হবে ভাগশেষগুলো উল্টা ক্রমে।
ফলাফলে আমরা ৪টি শেষ শূন্য পাই, যা ২ দিয়ে ভাগ দিয়ে ভাগশেষ ০ পাওয়ায় হয়েছে। ৫০৪০-এর প্রাইম ফ্যাক্টরাইজেশন = ২⁴ × ৫৬৭১১ × ৩৩৮১ × ১৮১, অর্থাৎ ২ তার ৪ বার ভাগ করতে পেরেছে ভাগশেষ ০ দিয়ে, যা শেষ শূন্যের সংখ্যার সমান। এইভাবে আমরা শেষ শূন্যের সংখ্যা বের করতে পারি।
উপরে আমরা শেষ শূন্যের সংখ্যা বের করার পদ্ধতি আলোচনা করেছি। আমাদের ফ্যাক্টোরিয়াল N-এ বেস B-এর সর্বোচ্চ ঘাত বের করতে হবে। ধরুন বেস B = ১৪, তবে ১৪ বেস ১৪-এ ১০ হিসেবে রিপ্রেজেন্ট হবে, অর্থাৎ (14)₁₀ = (10)₁৪। এটিকে লেজান্ড্রের সূত্র (Legendre's formula) বলা হয়।
নিচে দিয়ে गयी 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 ইত্যাদি ভাষায়ও লিখা যায়। আশা করি আপনি এই আর্টিকেলটি সহায়ক পাবেন।