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

Tìm bộ ba Coprime không bắc cầu trong một phạm vi trong C ++

Giả sử chúng ta có giới hạn dưới và giới hạn trên, và chúng ta phải tìm bộ ba không dịch chuyển (x, y, z), sao cho cặp (x, y) là cùng chuẩn (GCD là 1), cặp (y, z) là cùng chuẩn , nhưng cặp (x, z) không phải là một cặp nguyên tố. Ví dụ:nếu giới hạn dưới là 2 và giới hạn trên là 10, thì các phần tử là {2, 3, 4, 5, 6, 7, 8, 9, 10}, ở đây bộ ba có thể là (4, 7, 8 ), ở đây (4, 7) và (7, 8) là cặp chuẩn, nhưng (4, 8) không phải là cặp chuẩn.

Chúng tôi sẽ làm theo cách tiếp cận ngây thơ để giải quyết vấn đề này. Chúng tôi sẽ tạo tất cả các bộ ba có thể có trong phạm vi giới hạn dưới và giới hạn trên, sau đó khớp với các tiêu chí.

Ví dụ

#include <iostream>
#include <algorithm>
using namespace std;
bool isCoprime(int a, int b){
   return (__gcd(a, b) == 1);
}
void tripletInRange(int left, int right) {
   bool flag = false;
   int A, B, C;
   // Generate and check for all possible triplets
   // between L and R
   for (int a = left; a <= right; a++) {
      for (int b = a + 1; b <= right; b++) {
         for (int c = b + 1; c <= right; c++) {
            if (isCoprime(a, b) && isCoprime(b, c) && ! isCoprime(a, c)) {
               flag = true;
               A = a;
               B = b;
               C = c;
               break;
            }
         }
      }
   }
   if (flag == true) {
      cout << "(" << A << ", " << B << ", " << C << ")" << " is one
      such possible triplet between " << left << " and " << right << endl;
   } else {
      cout << "No Such Triplet exists between " << left << " and " << right << endl;
   }
}
int main() {
   int left = 2, right = 10;
   tripletInRange(left, right);
}

Đầu ra

(8, 9, 10) is one such possible triplet between 2 and 10