কম্পিউটার

C++ এ O(log n) এ একটি জটিল সংখ্যার শক্তির জন্য প্রোগ্রাম


x+yi এবং একটি পূর্ণসংখ্যা n আকারে একটি জটিল সংখ্যা দেওয়া হয়েছে; কাজটি হল জটিল সংখ্যার মান গণনা করা এবং মুদ্রণ করা যদি আমরা জটিল সংখ্যাটিকে n দ্বারা শক্তি দেই।

একটি জটিল সংখ্যা কী?

একটি জটিল সংখ্যা হল সংখ্যা যা a + bi আকারে লেখা যেতে পারে, যেখানে a এবং b হল বাস্তব সংখ্যা এবং i হল সমীকরণের সমাধান বা আমরা একটি কাল্পনিক সংখ্যা বলতে পারি। সুতরাং, সহজভাবে বললে আমরা বলতে পারি যে জটিল সংখ্যা হল বাস্তব সংখ্যা এবং কাল্পনিক সংখ্যার সংমিশ্রণ।

একটি জটিল সংখ্যার শক্তি বৃদ্ধি

একটি জটিল সংখ্যার শক্তি বাড়াতে আমরা নীচের সূত্রটি ব্যবহার করি -

(a+bi) (c+di)=( ac−bd )+(ad+bc )i

যেমন আমাদের একটি জটিল সংখ্যা আছে

2+3i এবং এর শক্তি 5 দ্বারা বাড়ালে আমরা −

পাব

(2+3 i) 5 =(2+3 i)(2+3i)(2+3 i)(2+3 i)(2+3i)

উপরের সূত্রটি ব্যবহার করে আমরা উত্তর পাব −

উদাহরণ

Input: x[0] = 10, x[1] = 11 /*Where x[0] is the first real number and 11 is the
second real number*/
n = 4
Output: -47959 + i(9240)
Input: x[0] = 2, x[1] =3
n = 5
Output: 122 + i(597)

উপরের সমস্যা সমাধানের জন্য আমরা যে পদ্ধতি ব্যবহার করছি -

সুতরাং, সমস্যাটি পুনরাবৃত্তিমূলক পদ্ধতি ব্যবহার করে সহজেই সমাধান করা যেতে পারে তবে জটিলতা হবে O(n), তবে আমাদের O(log n) সময়ে সমস্যাটি সমাধান করতে হবে। তার জন্য আমরা -

  • প্রথমে একটি অ্যারের আকারে ইনপুট নিন।
  • ফাংশনে x^n
      পাওয়ার
    • n 1 হলে পরীক্ষা করুন, তারপর x দিন
    • পুনরাবৃত্তভাবে পাওয়ার পাস x এবং n/2 কল করুন এবং এর ফলাফল একটি পরিবর্তনশীল বর্গ এ সংরক্ষণ করুন।
    • n কে 2 দিয়ে ভাগ করলে বাকি 0 থাকে কিনা তা পরীক্ষা করুন; যদি তাই হয় তাহলে cmul(sq, sq)
    • থেকে প্রাপ্ত ফলাফল ফেরত দিন
    • n কে 2 দিয়ে ভাগ করলে অবশিষ্ট 0 না থাকে কিনা তা পরীক্ষা করুন; যদি তাই হয় তাহলে cmul(x, cmul(sq, sq)) থেকে প্রাপ্ত ফলাফল ফেরত দিন।
  • ফাংশনে cmul().
    • x1 =a+bi এবং x2 =x+di কিনা পরীক্ষা করুন, তারপর x1 * x2 =(a*c–b*d)+(b*c+d*a)i।
  • প্রাপ্ত ফলাফল ফেরত দিন এবং মুদ্রণ করুন।

অ্যালগরিদম

Start
Step 1-> declare function to calculate the product of two complex numbers
   long long* complex(long long* part1, long long* part2)
   Declare long long* ans = new long long[2]
   Set ans[0] = (part1[0] * part2[0]) - (part1[1] * part2[1])
   Se ans[1] = (part1[1] * part2[0]) + part1[0] * part2[1]
   return ans
Step 2-> declare function to return the complex number raised to the power n
   long long* power(long long* x, long long n)
   Declare long long* temp = new long long[2]
   IF n = 0
      Set temp[0] = 0
      Set temp[1] = 0
      return temp
   End
   IF n = 1
      return x
   End
   Declare long long* part = power(x, n / 2)
   IF n % 2 = 0
      return complex(part, part)
   End
   return complex(x, complex(part, part))
Step 3 -> In main()
   Declare int n
   Declare and set long long* x = new long long[2]
   Set x[0] = 10
   Set x[1] = -11
   Set n = 4
   Call long long* a = power(x, n)
Stop

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
//calculate product of two complex numbers
long long* complex(long long* part1, long long* part2) {
   long long* ans = new long long[2];
   ans[0] = (part1[0] * part2[0]) - (part1[1] * part2[1]);
   ans[1] = (part1[1] * part2[0]) + part1[0] * part2[1];
   return ans;
}
// Function to return the complex number raised to the power n
long long* power(long long* x, long long n) {
   long long* temp = new long long[2];
   if (n == 0) {
      temp[0] = 0;
      temp[1] = 0;
      return temp;
   }
   if (n == 1)
      return x;
      long long* part = power(x, n / 2);
      if (n % 2 == 0)
         return complex(part, part);
         return complex(x, complex(part, part));
}
int main() {
   int n;
   long long* x = new long long[2];
   x[0] = 10;
   x[1] = -11;
   n = 4;
   long long* a = power(x, n);
   cout << a[0] << " + i ( " << a[1] << " )" << endl;
   return 0;
}

আউটপুট

power of complex number in O(Log n) : -47959 + i ( 9240 )

  1. হেক্সাডেসিমেল থেকে দশমিকের জন্য C++ প্রোগ্রাম

  2. C++ এ জটিল সংখ্যার জন্য acos() ফাংশন?

  3. C++ প্রোগ্রাম জটিল সংখ্যা গুণন সম্পাদন করতে

  4. একটি সংখ্যার শক্তি গণনা করার জন্য C++ প্রোগ্রাম