C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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を再帰的に呼び出し、その結果を変数sqに格納します。
    • 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. 16進数から10進数のC++プログラム

    16進数を入力として指定すると、タスクは指定された16進数を10進数に変換することです。 コンピューターの16進数は16を底とし、10進数は10を底とし、0〜9の値で表されますが、16進数は0〜15から始まる数字で、10はA、11はB、12はC、 Dとして13、Eとして14、Fとして15。 16進数を10進数に変換するには、次の手順に従います- 余りから右から左に数字を抽出し、それを0から始まる累乗で乗算し、(桁数)–1まで1ずつ増やします。 16進数から2進数に変換する必要があるため、8進数の基数は16であるため、累乗の基数は16になります。 指定された入力の桁にベースとパワーを掛け

  2. 数値の累乗を計算するC++プログラム

    数値の累乗はx^yとして計算できます。ここで、xは数値、yはその累乗です。 たとえば。 Let’s say, x = 2 and y = 10    x^y =1024    Here, x^y is 2^10 数値の累乗は、再帰的および非再帰的プログラムを使用して計算できます。これらのそれぞれは次のように与えられます。 非再帰的プログラムを使用した数の力 非再帰的プログラムを使用して数の累乗を見つけるプログラムは次のように与えられます- 例 #include<iostream> using namespace std;