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

C ++を使用して、2つの連続する数が互いに素でなく、3つの連続する数ごとが互いに素になるように数を出力するようにプログラムします。


このチュートリアルでは、2つの連続する数が互いに素でなく、3つの連続する数ごとに互いに素になるように、数を出力するプログラムについて説明します。

ここでは、整数Nが与えられます。互いに素になることがないように、109未満のN個の整数を出力する必要がありますが、3つの連続する整数のペアは互いに素でなければなりません。

たとえば、整数4があるとします。すると、上記の両方の条件に従う数値は次のようになります。

6 15 35 14

#include <bits/stdc++.h>
using namespace std;
#define limit 1000000000
#define MAX_PRIME 2000000
#define MAX 1000000
#define I_MAX 50000
map<int, int> map1;
int b[MAX];
int p[MAX];
int j = 0;
bool prime[MAX_PRIME + 1];
void sieve(int n){
   memset(prime, true, sizeof(prime));
   for (int p = 2; p * p <= n; p++){
      if (prime[p] == true){
         for (int i = p * p; i <= n; i += p)
            prime[i] = false;
      }
   }
   for (int p = 2; p <= n; p++){
      if (prime[p]) {
         b[j++] = p;
      }
   }
}
int gcdiv(int a, int b){
   if (b == 0)
      return a;
   return gcdiv(b, a % b);
}
//printing the required series
void print_elements(int n){
   sieve(MAX_PRIME);
   int i, g, k, l, m, d;
   int ar[I_MAX + 2];
   for (i = 0; i < j; i++){
      if ((b[i] * b[i + 1]) > limit)
         break;
      p[i] = b[i];
      map1[b[i] * b[i + 1]] = 1;
   }
   d = 550;
   bool flag = false;
   for (k = 2; (k < d - 1) && !flag; k++){
      for (m = 2; (m < d) && !flag; m++){
         for (l = m + k; l < d; l += k){
            if (((b[l] * b[l + k]) < limit)
               && (l + k) < d && p[i - 1] != b[l + k]
               && p[i - 1] != b[l] && map1[b[l] * b[l + k]] != 1){
                  if (map1[p[i - 1] * b[l]] != 1){
                     p[i] = b[l];
                     map1[p[i - 1] * b[l]] = 1;
                     i++;
                  }
            }
            if (i >= I_MAX) {
               flag = true;
               break;
            }
         }
      }
   }
   for (i = 0; i < n; i++)
      ar[i] = p[i] * p[i + 1];
   for (i = 0; i < n - 1; i++)
      cout << ar[i] << " ";
   g = gcdiv(ar[n - 1], ar[n - 2]);
   cout << g * 2 << endl;
}
int main(){
   int n = 4;
   print_elements(n);
   return 0;
}

出力

6 15 35 14

  1. C++で3つのポイントが同一線上にあるかどうかをチェックするプログラム

    3つの異なる値のポイントが与えられ、タスクはポイントが同一線上にあるかどうかを確認することです。 ポイントが同じ線上にある場合は同一線上にあると言われ、異なる線上にある場合は同一線上にありません。以下に、同一線上および非同一線上の点の図を示します。 入力 x1 = 1, x2 = 2, x3 = 3, y1 = 1, y2 = 4, y3 = 5 出力 no points are not collinear 入力 x1 = 1, y1 = 1, x2 = 1, y2 = 4, x3 = 1, y3 = 5 出力 points are collinear 以下のプログラム

  2. C++で2つの要素が隣接しないような循環配列の最大合計

    この問題では、循環配列cirArr[]が与えられます。私たちのタスクは、C++で2つの要素が隣接しないように循環配列の最大合計を見つけるプログラムを作成することです。 問題の説明 循環配列の場合、隣接する要素を取得できないように、配列の要素の最大合計を見つける必要があります。つまり、代替要素を取得する必要があります。 循環アレイ は、配列の最後の要素が最初の要素に接続されている特殊なタイプの配列です。 問題を理解するために例を見てみましょう 入力 cirArr[] = {4, 1, 5, 3, 2} 出力 9 説明 最大合計循環サブシーケンスは[4、5、2]です。合計=9 ソリ