একটি ইন্টিজার num ইনপুট হিসেবে দেওয়া আছে। লক্ষ্য হলো গুণফল 1^1 × 2^2 × 3^3 × ... × num^num-এ শেষে কতগুলো ০ আছে সেটি বের করা।
উদাহরণ ১
ইনপুট
num=5
আউটপুট
(1^1)*(2^2)*(3^3)*(4^4)*... গুণফলে ট্রেলিং জিরোর সংখ্যা: 5
ব্যাখ্যা
গুণফলে ২ এবং ৫-এর সংখ্যা: 1^1 * 2^2 * 3^3 * 4^4 * 5^5 = 1^1 * 2^2 * 3^3 * (2^2)^4 * 5^5। তাই মোট ১০টি ২ এবং ৫টি ৫, ন্যূনতম ৫ তাই ট্রেলিং জিরো ৫।
উদাহরণ ২
ইনপুট
num=10
আউটপুট
(1^1)*(2^2)*(3^3)*(4^4)*... গুণফলে ট্রেলিং জিরোর সংখ্যা: 5
ব্যাখ্যা
গুণফলে ২ এবং ৫-এর সংখ্যা: 1^1 * 2^2 * 3^3 * 4^4 * 5^5 * 6^6 * 7^7 * 8^8 * 9^9 * 10^10 = ... মোট ২০টি ২ এবং ১৫টি ৫, ন্যূনতম ১৫ তাই ট্রেলিং জিরো ১৫।
প্রয়োগ করা পদ্ধতি
এই পদ্ধতিতে গুণফলে থাকা প্রতিটি সংখ্যার প্রাইম ফ্যাক্টরাইজেশনে ২ এবং ৫-এর সংখ্যা গণনা করা হয়। যেহেতু প্রতিটি সংখ্যা নিজের পাওয়ারে থাকছে, তাই ২ বা ৫-এর কাউন্টের ন্যূনতম মানই ট্রেলিং জিরোর সংখ্যা দেবে। কারণ প্রতিটি ২×৫ গুণফলে একটি ০ যোগ করে।
ইনপুট হিসেবে ইন্টিজার
numনিন।count_trailing(int num)ফাংশনটি ট্রেলিং জিরোর সংখ্যা রিটার্ন করে।আরম্ভিক কাউন্ট ০ রাখুন।
temp_2 = 0,temp_5 = 0ভেরিয়েবল দুটি নিন ২ এবং ৫-এর কাউন্টের জন্য।forলুপ দিয়েi=1থেকেi<=numপর্যন্ত ট্রুভার্স করুন।temp = iনিন।whileলুপ দিয়ে যতক্ষণtemp২ দিয়ে বিভাজ্য, ততক্ষণ এটিকে অর্ধেক করুন এবংtemp_2-এiযোগ করুন ২-এর কাউন্ট হিসেবে।whileলুপ দিয়ে যতক্ষণtemp৫ দিয়ে বিভাজ্য, ততক্ষণ এটিকে ৫ দিয়ে ভাগ করুন এবংtemp_5-এiযোগ করুন ৫-এর কাউন্ট হিসেবে।count = min(temp_2, temp_5)দিয়ে দুটি কাউন্টের ন্যূনতম নিন।কাউন্ট রিটার্ন করুন ফলাফল হিসেবে।
উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;
int count_trailing(int num) {
int count = 0;
int temp_2 = 0;
int temp_5 = 0;
for (int i = 1; i <= num; i++) {
int temp = i;
while(temp % 2 == 0 && temp > 0) {
temp = temp / 2;
temp_2 = temp_2 + i;
}
while (temp % 5 == 0 && temp > 0) {
temp = temp / 5;
temp_5 = temp_5 + i;
}
}
count = min(temp_2, temp_5);
return count;
}
int main() {
int num = 5;
cout << "(1^1)*(2^2)*(3^3)*(4^4)*... গুণফলে ট্রেলিং জিরোর সংখ্যা: " << count_trailing(num);
return 0;
}
আউটপুট
উপরোক্ত কোডটি রান করলে নিচের আউটপুটটি আসবে:
(1^1)*(2^2)*(3^3)*(4^4)*... গুণফলে ট্রেলিং জিরোর সংখ্যা: 5