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

Chương trình C ++ để tìm các cặp duy nhất sao cho mỗi phần tử nhỏ hơn hoặc bằng N

Trong bài này, chúng ta sẽ thảo luận về một chương trình tìm các cặp số duy nhất có các phần tử nhỏ hơn hoặc bằng N và tuân theo một số điều kiện nhất định -

  • Bình phương hiệu giữa hai số phải bằng LCM của hai số đó.

  • HCF của hai số đó có thể được biểu diễn dưới dạng tích của hai số liên tiếp bất kỳ.

Cách tốt nhất để giải quyết vấn đề này là lấy hai số liên tiếp (bắt đầu từ 1) và tìm bội số của các số đó. Sau đó, trong số các bội số, để chỉ định một cặp số, chúng ta cần kiểm tra xem các số trong cặp số có thỏa mãn điều kiện đã cho đầu tiên hay không.

Ví dụ, lấy trường hợp của 2 và 3. Tích của chúng sẽ là 6. Bây giờ nếu chúng ta tiếp tục với bội số của 6, chúng ta sẽ nhận được 6, 12, 18, 24… Lấy hai số cùng một lúc, chúng ta kiểm tra xem bình phương hiệu giữa hai số liên tiếp (trong trường hợp này là 36) bằng LCM của các số đó. Cuối cùng chúng tôi nhận được cặp trong trường hợp này là 12 và 18.

Tổng quát hóa phương trình, chúng ta nhận được hai số là Z * (Z * (Z + 1)) và (Z + 1) * (Z * (Z + 1)) trong đó Z là số đầu tiên trong HCF (cặp liên tiếp sản phẩm).

Cuối cùng sử dụng điều kiện rằng các giá trị phải nhỏ hơn N, chúng ta nhận được

(Z + 1) * (Z * (Z + 1)) <=N hoặc Z 3 + (2 * Z 2 ) + Z <=N.

Ví dụ

#include <iostream>
using namespace std;
int main() {
   int N = 489, pairs, i = 1;
   //counting the number of pairs having elements less than N
   while((i*i*i) + (2*i*i) + i <= N) {
      i++;
   }
   pairs = i;
   cout << "Pairs :" << endl;
   //printing the two elements of the pair
   for(int j = 1; j < pairs; j++) {
      cout << j*(j*(j+1)) << " " << (j+1)*(j*(j+1)) << endl;
   }  
   return 0;
}

Đầu ra

Pairs :
2 4
12 18
36 48
80 100
150 180
252 294
392 448