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

C++で指定された長さの合成数の範囲を検索します


番号nがあるとします。正の整数の範囲を見つける必要があります。範囲内のすべての数値は合成数であり、範囲の長さはnです。複数の範囲がある場合は、任意の1つの範囲を印刷します。合成数は、1とそれ自体以外の約数が少なくとも1つある数です。

範囲の長さがnであるため、最初の数値がaの場合、他の数値はa + 1、a + 2、…、a + n – 1であり、すべて合成数である必要があります。 x!(xは正の整数)を見ると、xの因数は2、3、4、…、p – 1です。したがって、p! + iには係数iがあるので、p! +私は複合でなければなりません。 p! + 2、p! + 3、…p! + p – 1は、すべて複合です。したがって、範囲は[p! + 2、p! + p – 1]

#include<iostream>
using namespace std;
int fact (int n) {
   if (n == 0)
      return 1;
   return n * fact(n-1);
}
void showRange(int n) {
   int a = fact(n + 2) + 2;
   int b = a + n - 1;
   cout << "[" << a << ", " << b << "]";
}
int main() {
   int n = 3 ;
   showRange(n);
}

出力

[122, 124]

  1. C++で指定された制約の下で重複を検索します

    6つの異なる番号のリストがあるとします。 1つの数字だけが5回繰り返されます。したがって、配列には合計10個の要素があります。 2つの比較のみを使用して重複する番号を見つけます。リストが[1、2、3、4、4、4、4、4、5、6]のような場合、出力は4です。 数字は10個しかないため、重複する数字の種類に関係なく、数字の範囲はインデックス3から5になります。これらのインデックスを確認することで、結果を見つけることができます。 例 #include<iostream> using namespace std; int getDuplicate(int array[]) {  

  2. xがC++でyを分割するように、指定された範囲で別個のペア(x​​、y)を見つけます

    ここで、興味深い問題が1つあります。ここで、ペア(x、y)が見つかります。ここで、xとyは範囲内にあるため、l <=x、y <=rであり、ペアには1つのプロパティがあり、xの値はyを除算します。 。利用可能なペアが複数ある場合は、1つだけを選択してください。 下限lと2lの値を取得すれば、O(1)時間でこの問題を解決できます。 y / xの最小値は2である可能性があり、範囲内にさらに大きな値が存在する場合は、2が範囲内になります。また、xを増やすと、2xも増えるため、lと2lは、指定された範囲に入る最小のペアになります。 例 #include<iostream> using na