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

C++でn番目のエルミート番号を見つける


この問題では、整数値Nが与えられます。私たちのタスクは、n番目のエルミート数を見つけるプログラムを作成することです。

ハーマイト番号 は数値であり、引数が0の場合のエルミート数の値です。

Nth hermite Number is HN = (-2) * (N - 1) * H(N-2)
The base values are H0 = 1 and H0 = 0.

エルミートシーケンスは、-1、0、-2、0、12、0、-120、0、1680、0…です。

問題を理解するために例を見てみましょう

入力

N = 7

出力

0

入力

N = 6

出力

-120

ソリューションアプローチ

この問題の簡単な解決策は、エルミート数の式を使用することです。これは再帰を使用して行われ、N th を見つけることができます。 期間。

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;
int calcNHermiteNumber(int N) {
   if (N == 0)
      return 1;
   if (N % 2 == 1)
      return 0;
   else
      return -2 * (N - 1) * calcNHermiteNumber(N - 2);
}
int main() {
   int N = 10;
   cout<<"The "<<N<<"th hermite Number is "<<calcNHermiteNumber(N);
   return 0;
}

出力

The 10th hermite Number is -30240

効率的なアプローチ

問題を解決するための効率的なアプローチは、式を使用することです。再帰式を使用して一般式を導出できます。

ここで、Nの値が奇数の場合、エルミート数は0です。

Nの値が偶数の場合、それらは式で定義された値になります。

HN = ( (-1)(N/2)) * ( 2(N/2) ) * (N-1)!!

(N-1)!! (n-1)*(n-3)* ... 3*1として計算される半階乗です。

ソリューションの動作を説明するプログラム

#include <iostream>
#include <math.h>
using namespace std;
int calcSemiFact(int n) {
   int factVal = 1;
   for (int i = 1; i <= n; i = i + 2) {
      factVal *= i;
   }
   return factVal;
}
int calcNHermiteNumber(int n) {
   if (n % 2 == 1)
      return 0;
   int HermiteNumber = (pow(2, n / 2)) * calcSemiFact(n - 1);
   if ((n / 2) % 2 == 1)
      HermiteNumber *= -1;
   return HermiteNumber;
}
int main() {
   int N = 10;
   cout<<"The "<<N<<"th hermite Number is "<<calcNHermiteNumber(N);
   return 0;
}

出力

The 10th hermite Number is -30240

  1. C++で有理数のLCMを見つける

    ここでは、有理数のLCMを見つける方法を説明します。有理数のリストがあります。リストが{2/7、3 / 14、5 / 3}のようであるとすると、LCMは30/1になります。 この問題を解決するには、すべての分子のLCMを計算し、次にすべての分母のgcdを計算し、次に有理数のLCMを計算する必要があります- $$ LCM =\ frac {LCM \:of \:all \:𝑛𝑢𝑚𝑒𝑟𝑎𝑡𝑜𝑟𝑠} {GCD \:of \:all \:𝑑𝑒𝑛𝑜𝑚𝑖𝑖 例 #include <iostream> #include <vector> #inc

  2. C++のCHAR_BIT

    CHAR_BITは、charのビット数です。これは、C++言語の「limits.h」ヘッダーファイルで宣言されています。 1バイトあたり8ビットです。 これがC++言語のCHAR_BITの例です 例 #include <bits/stdc++.h> using namespace std; int main() {    int x = 28;    int a = CHAR_BIT*sizeof(x);    stack<bool> s;    cout << "T