Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình in các số sao cho không có hai số liên tiếp nào là đồng nguyên tố và mọi số liên tiếp có ba số liên tiếp là đồng nguyên tố Sử dụng C ++

Trong hướng dẫn này, chúng ta sẽ thảo luận về chương trình in các số sao cho không có hai số liên tiếp nào là đồng nguyên tố và cứ ba số liên tiếp là đồng nguyên tố.

Trong trường hợp này, chúng ta sẽ được cung cấp một số nguyên N, chúng ta phải in ra N số nguyên nhỏ hơn 109 sao cho không có hai số liên tiếp nào là nguyên tố nhưng một cặp 3 số nguyên liên tiếp phải là nguyên tố.

Ví dụ:giả sử chúng ta có số nguyên 4. Sau đó, các số tuân theo cả hai điều kiện được cung cấp ở trên là

6 15 35 14

Ví dụ

#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;
}

Đầu ra

6 15 35 14