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

Số nguyên mạnh mẽ trong C ++

Giả sử chúng ta có ba số nguyên "a" và "b" và "giới hạn". Nhiệm vụ là in các số trong phạm vi [a, limit]. Danh sách những con số này được cho là những số nguyên mạnh mẽ và được biểu diễn dưới dạng,

a ^ i + b ^ j sao cho i> =0 và j> =0

Ví dụ

Đầu vào-1:

a = 2

b = 5

limit = 10

Đầu ra:

[2, 3, 4, 5, 6, 7, 9]

Giải thích: cho mỗi tôi và j,

2 ^ 0 + 5 ^ 0 =2, 2 ^ 0 + 5 ^ 1 =6

2 ^ 1 + 5 ^ 0 =3, 2 ^ 1 + 5 ^ 1 =7

2 ^ 2 + 5 ^ 0 =5, 2 ^ 3 + 5 ^ 0 =9

Phương pháp tiếp cận để giải quyết vấn đề này

Cách tiếp cận brute force để giải quyết vấn đề cụ thể này là chúng ta sẽ lấy hai vòng lặp lồng nhau và lặp lại cho đến khi giới hạn. Sau đó, chúng tôi sẽ tìm tổng của hai số cho mỗi số mũ trong giới hạn trên và chèn số kết quả vào danh sách.

  • Lấy ba số 'a', 'b' và 'limit'.
  • Một hàm strongnumbers (int a, int b, int limit) nhận các số 'a', 'b' và 'limit' làm đầu vào. Hàm trả về danh sách tất cả các số mạnh sao cho a ^ i + b ^ j trong đó i> =0 và j> =0.
  • Thực hiện hai vòng lặp lồng nhau cho đến giới hạn và mọi lúc, hãy tìm các số mạnh bằng cách nhân với các chỉ số của nó.
  • Nếu số nằm giữa phạm vi [a, giới hạn], thì hãy lưu trữ số đó trong một tập hợp (để tránh trùng lặp các số).
  • Lặp lại tập hợp và in đầu ra.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
void powerfulNum(int a, int b, int limit) {
   set < int > s;
   for (int i = 1; i < limit; i *= a) {
      for (int j = 1; j < limit; j *= b) {
         if (i + j <= limit) {
            s.insert(i + j);
         } else break;
         if (b == 1) break;
      }
      if (a == 1) break;
   }
   for (auto it: s) {
      cout << it << " ";
   }
}
int main() {
   int a = 2;
   int b = 5;
   int limit = 10;
   powerfulNum(a, b, limit);
   return 0;
}

Chạy đoạn mã trên sẽ tạo ra kết quả là,

Đầu ra

2 3 5 6 7 9

Ở đây, tất cả các số mạnh trong phạm vi từ 2 đến 10 là [2, 3, 4, 6, 7, 9].