C++ 中的强大整数

让我们假设我们有三个整数 'a' 和 'b' 和 'limit'。任务是打印范围 [a, limit] 中的数字。据说这些数字的列表是强大的整数,并表示为,

a^i + b^j 使得 i >= 0 和 j >= 0

例如

输入-1:

a = 2b = 5limit = 10

输出:

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

解释: 对于每个 i 和 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

                      

解决这个问题的方法

解决这个特定问题的蛮力方法是我们将采用两个嵌套循环并迭代到极限。然后我们将找到上限中每个指数的两个数字之和,并将结果数字插入列表中。

  • 取三个数字“a”、“b”和“limit”。

  • 函数powerfulnumbers(int a, int b, int limit)以数字 'a' 、 'b' 和 'limit' 作为输入。该函数返回所有强数的列表,其中 a^i + b^j 其中 i >= 0 且 j >= 0。

  • 取两个嵌套循环直到极限,每次都通过乘以它的索引来找到强大的数字。

  • 如果数字位于范围 [a, limit] 之间,则将该数字存储在一个集合中(以避免数字重复)。

  • 迭代集合并打印输出。

示例

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

运行上面的代码将生成输出,

输出结果

2 3 5 6 7 9

在这里,2 到 10 范围内的所有强力数字都是 [2, 3, 4, 6, 7, 9]。