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

বড় সংখ্যার ফ্যাক্টোরিয়াল (Factorial of a large number)


কম্পিউটারে, ভেরিয়েবলগুলো মেমোরি লোকেশনে সংরক্ষিত হয়। কিন্তু মেমোরি লোকেশনের আকার নির্দিষ্ট, তাই যখন আমরা ১৫! বা ২০! এর মতো বড় মানের ফ্যাক্টোরিয়াল বের করতে চাই, ফ্যাক্টোরিয়াল মান মেমোরি রেঞ্জ পার করে যায় এবং ভুল ফলাফল রিটার্ন করে।

বড় সংখ্যা গণনার জন্য, আমাদের রেজাল্ট সংরক্ষণের জন্য একটি অ্যারে ব্যবহার করতে হবে। অ্যারে প্রতিটি এলিমেন্টে রেজাল্টের আলাদা আলাদা ডিজিট সংরক্ষিত থাকে। কিন্তু এখানে আমরা সরাসরি কোনো সংখ্যা অ্যারের সাথে গুণ করতে পারি না, আমাদের রেজাল্ট অ্যারের সব ডিজিটের জন্য ম্যানুয়াল গুণনার প্রক্রিয়া করতে হবে।

ইনপুট এবং আউটপুট

ইনপুট: একটি বড় সংখ্যা: ৫০ আউটপুট: প্রদত্ত সংখ্যার ফ্যাক্টোরিয়াল হল: 30414093201713378043612608166064768844377641568960512000000000000

অ্যালগরিদম

multiply(x, multiplicand)

ইনপুট: সংখ্যা x, এবং বড় multiplicand অ্যারে হিসেবে।

আউটপুট: গুণনের ফলাফল।

শুরু 
  carry := 0 
  multiplicand-এর সব ডিজিট i জন্য, করুন 
    prod := i*x+carry 
    i := prod mod 10 
    carry := prod / 10 
  শেষ 
  যতক্ষণ carry ≠ 0, করুন 
    (carry mod 10) কে multiplicand অ্যারের শেষে প্রবেশ করান 
    carry := carry/10 
  শেষ 
শেষ

factorial(n)

ইনপুট: সংখ্যা n।

আউটপুট: n-এর ফ্যাক্টোরিয়াল বের করুন।

শুরু 
  result অ্যারে সংজ্ঞায়িত করুন। 
  result-এ 1 প্রবেশ করান 
  i := 2 থেকে n পর্যন্ত, করুন 
    multiply(i, result) 
  শেষ 
  result উল্টো করুন 
  result ফেরত দিন 
শেষ

উদাহরণ

#include<iostream> #include<vector> #include<algorithm> using namespace std; void multiply(int x, vector<int>&multiplicand) {   //multiplicand কে x দিয়ে গুণ করুন   int carry = 0;    //carry ০ দিয়ে ইনিশিয়ালাইজ করুন   vector<int>::iterator i;   for (i=multiplicand.begin(); i!=multiplicand.end(); i++) { //multiplicand-এর সব ডিজিটের সাথে x গুণ করুন     int prod = (*i) * x + carry;     *i = prod % 10;     //প্রোডাক্টের শেষ ডিজিটটুকু রাখুন     carry  = prod/10;     //বাকি অংশ ক্যারিয়ের সাথে যোগ করুন   }   while (carry) {     //যখন ক্যারি থাকে     multiplicand.push_back(carry%10);     carry = carry/10;   } } void factorial(int n) {   vector<int> result;   result.push_back(1);    //প্রথমে রেজাল্ট হিসেবে 1 সংরক্ষণ করুন   for (int i=2; i<=n; i++)     multiply(i, result);  //সংখ্যা ১*২*৩*......*n গুণ করুন   cout << "Factorial of given number is: "<<endl;   reverse(result.begin(), result.end());   vector<int>::iterator it;   //রেজাল্টের ক্রম উল্টো করুন   for(it = result.begin(); it != result.end(); it++)     cout << *it; } int main() {   factorial(50); }

আউটপুট

Factorial of given number is: 30414093201713378043612608166064768844377641568960512000000000000

  1. C++ Boost Multiprecision লাইব্রেরি দিয়ে বড় সংখ্যার ফ্যাক্টোরিয়াল

  2. জাভা প্রোগ্রাম: একটি সংখ্যার ফ্যাক্টোরিয়াল নির্ণয়

  3. পাইথনে বড় সংখ্যার ফ্যাক্টোরিয়াল বের করার প্রোগ্রাম

  4. পাইথনে ফ্যাক্টোরিয়াল (factorial) বের করার তিনটি পদ্ধতি