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

C++-এ একটি সংখ্যার সর্বোচ্চ ঘাত যা ফ্যাক্টোরিয়ালকে ভাগ করে দেয়


দুটি সংখ্যা n এবং fact দেওয়া আছে। আমাদের n-এর সর্বোচ্চ ঘাত খুঁজে বের করতে হবে যা fact! (fact-এর ফ্যাক্টোরিয়াল) কে ভাগ করে দেয়। উদাহরণস্বরূপ, fact = 5 এবং n = 2 হলে আউটপুট হবে ৩। কারণ ৫! = ১২০, এবং এটি ২³ = ৮ দ্বারা বিভাজ্য।

এখানে আমরা লেজান্ড্রের সূত্র (Legendre's formula) ব্যবহার করব। এটি একটি মৌলিক সংখ্যার সর্বোচ্চ ঘাত খুঁজে বের করে যা fact! কে ভাগ করে দেয়। আমরা n-এর সব মৌলিক গুণনীয়ক খুঁজে বের করব, তারপর প্রতিটি মৌলিক গুণনীয়কের জন্য fact! কে ভাগ করে দেয় এমন সর্বোচ্চ ঘাত নির্ণয় করব।

যেমন fact = 146 এবং n = 15 হলে, n-এর মৌলিক গুণনীয়ক ৫ এবং ৩। তাই:

৩-এর জন্য: [146/3] + [48/3] + [16/3] + [5/3] + [1/3] = 48 + 16 + 5 + 1 + 0 = 70।

৫-এর জন্য: [146/5] + [29/5] + [5/5] + [1/5] = 29 + 5 + 1 + 0 = 35।

উদাহরণ

#include<iostream> #include<cmath> using namespace std; int getPowerPrime(int fact, int p) {    int res = 0;    while (fact > 0) {       res += fact / p;       fact /= p;    }    return res; } int findMinPower(int fact, int n) {    int res = INT_MAX;    for (int i = 2; i <= sqrt(n); i++) {       int cnt = 0;       if (n % i == 0) {          cnt++;          n = n / i;       }       if (cnt > 0) {          int curr = getPowerPrime(fact, i) / cnt;          res = min(res, curr);       }    }    if (n >= 2) {       int curr = getPowerPrime(fact, n);       res = min(res, curr);    }    return res; } int main() {    int fact = 146, n = 5;    cout << "Minimum power: " << findMinPower(fact, n); }

আউটপুট

Minimum power: 35

  1. C++-এ বড় সংখ্যার ফ্যাক্টোরিয়াল বের করা

  2. রিকার্সন ব্যবহার করে সংখ্যার ফ্যাক্টোরিয়াল বের করার C++ প্রোগ্রাম

  3. ইটারেশন (Iteration) ব্যবহার করে ফ্যাক্টোরিয়াল বের করার C++ প্রোগ্রাম

  4. C++ প্রোগ্রাম: ফ্যাক্টোরিয়াল (Factorial) নির্ণয়