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

C++-এ (1^1)*(2^2)*(3^3)*(4^4)*... গুণফলে ট্রেলিং জিরোর সংখ্যা গণনা


একটি ইন্টিজার 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

  1. সি++-এ আয়তক্ষেত্রে বর্গের সংখ্যা গণনা

  2. C++-এ হেক্সাডেসিমেল সংখ্যা গণনা

  3. C++-এ ফ্যাক্টোরিয়ালে অঙ্ক গণনা

  4. C++-এ ফ্যাক্টোরিয়ালের ট্রেইলিং জিরো (Factorial Trailing Zeroes)