একটি ইন্টিজার সংখ্যা ইনপুট হিসেবে দেওয়া আছে। লক্ষ্য হলো সেই সংখ্যার ফ্যাক্টোরিয়ালে শেষে কতগুলো ০ আছে সেটি বের করা। একটি সংখ্যা N-এর ফ্যাক্টোরিয়াল হলো [1, N] রেঞ্জের সকল সংখ্যার গুণফল।
আমরা জানি ট্রেলিং জিরো তখনই পাওয়া যায় যখন সংখ্যা ১০-এর গুণফল হয় অথবা ফ্যাক্টর জোড়া (২,৫) থাকে। ৫-র চেয়ে বড় যেকোনো সংখ্যার ফ্যাক্টোরিয়ালে ২-এর সংখ্যা ৫-র চেয়ে বেশি থাকে প্রাইম ফ্যাক্টরাইজেশনে। একটি সংখ্যকে ৫-এর ঘাত দিয়ে ভাগ করলে তার ফ্যাক্টরে ৫-এর সংখ্যা পাওয়া যায়। তাই ৫-এর সংখ্যাটিই ট্রেলিং জিরোর সংখ্যা বতাবে।
উদাহরণ ১
ইনপুট
number=6
আউটপুট
একটি সংখ্যার ফ্যাক্টোরিয়ালে ট্রেলিং জিরোর সংখ্যা: 1
ব্যাখ্যা
ফ্যাক্টোরিয়াল ৩০। ৩০-এর প্রাইম ফ্যাক্টর: ২ × ৩ × ৫। তাই শুধু একটি (২,৫) জোড়া আছে, ট্রেলিং জিরো ১।
উদাহরণ ২
ইনপুট
number=12
আউটপুট
একটি সংখ্যার ফ্যাক্টোরিয়ালে ট্রেলিং জিরোর সংখ্যা: 2
ব্যাখ্যা
ফ্যাক্টোরিয়াল ৪৭৯০০১৬০০। প্রাইম ফ্যাক্টর: ২¹⁰ × ৩⁵ × ৫² × ৭¹ × ১১¹। তাই (২,৫) এর ২ জোড়া পাওয়া যায়, ট্রেলিং জিরো ২।
প্রয়োগ করা পদ্ধতি
এই পদ্ধতিতে সংখ্যাকে ৫-এর ঘাতগুলো দিয়ে ভাগ করা হয়। যদি ফলাফল ১-র চেয়ে বড় হয়, তবে ট্রেলিং জিরোর সংখ্যা ৫-এর কাউন্ট হবে। এটিকে কাউন্টে যোগ করা হয়।
ইনপুট হিসেবে ইন্টিজার
numberনিন।trailing_zeros(int number)ফাংশনটি ট্রেলিং জিরোর সংখ্যা রিটার্ন করে।আরম্ভিক কাউন্ট ০ রাখুন।
forলুপ দিয়ে সংখ্যাকে ৫-এর ঘাত দিয়ে ভাগ করুন।যদি
number/i >= 1হয়, তবে এই মান কাউন্টে যোগ করুন।লুপ শেষে কাউন্ট রিটার্ন করুন ফলাফল হিসেবে।
উদাহরণ কোড
#include <iostream>
using namespace std;
int trailing_zeros(int number) {
int count = 0;
for (int i = 5; number / i >= 1; i *= 5) {
int temp = number / i;
count = count + temp;
}
return count;
}
int main() {
int number = 50;
cout << "একটি সংখ্যার ফ্যাক্টোরিয়ালে ট্রেলিং জিরোর সংখ্যা: " << trailing_zeros(number);
return 0;
}
আউটপুট
উপরোক্ত কোডটি রান করলে নিচের আউটপুটটি আসবে:
একটি সংখ্যার ফ্যাক্টোরিয়ালে ট্রেলিং জিরোর সংখ্যা: 12