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

In tất cả các số nguyên là tổng lũy ​​thừa của hai số đã cho trong C ++


Trong bài toán này, chúng ta cho hai số a và b và một số nguyên bị ràng buộc và chúng ta phải in tất cả các giá trị nhỏ hơn ràng buộc là tổng bình phương của a và b .

Bound >= ai + bj

Hãy lấy một ví dụ để hiểu vấn đề -

Input: a=2, b=3, bound=8
Output: 2 3 4 5 7

Để giải quyết vấn đề này, chúng ta sẽ sử dụng các vòng lặp lồng nhau sử dụng hai biến i và j từ 0. Vòng lặp ngoài sẽ có điều kiện kết thúc là xi =bind và vòng lặp bên trong sẽ có điều kiện kết thúc là xi + yj> ràng buộc . Đối với mỗi lần lặp của vòng lặp bên trong, chúng ta sẽ lưu trữ giá trị của xi + yi trong một danh sách đã sắp xếp chứa tất cả các giá trị đó. Và sau đó ở cuối in tất cả các giá trị của danh sách.

Ví dụ

Chương trình thể hiện việc triển khai giải pháp của chúng tôi -

#include <bits/stdc++.h>
using namespace std;
void powerSum(int x, int y, int bound) {
   set<int> sumOfPowers;
   vector<int> powY;
   int i;
   powY.push_back(1);
   for (i = y; i < bound; i = i * y)
      powY.push_back(i);
   i = 0;
   while (true) {
      int powX = pow(x, i);
      if (powX >= bound)
         break;
      for (auto j = powY.begin(); j != powY.end(); ++j) {
         int num = powX + *j;
         if (num <= bound)
            sumOfPowers.insert(num);
         else
            break;
      }
      i++;
   }
   set<int>::iterator itr;
   for (itr = sumOfPowers.begin(); itr != sumOfPowers.end(); itr++) {
      cout<<*itr <<" ";
   }
}
int main() {
   int x = 2, y = 3, bound = 25;
   cout<<"Sum of powers of "<<x<<" and "<<y<<" less than "<<bound<<" are :\n";
   powerSum(x, y, bound);
   return 0;
}

Đầu ra

Sum of powers of 2 and 3 less than 25 are −
2 3 4 5 7 9 10 11 13 17 19 25