# 970.Powerful Integers

Given two positive integers x and y, an integer is powerful if it is equal to x^i + y^j for some integers i >= 0 and j >= 0.

Return a list of all powerful integers that have value less than or equal to bound.

You may return the answer in any order. In your answer, each value should occur at most once.

`Example 1:​Input: x = 2, y = 3, bound = 10Output: [2,3,4,5,7,9,10]Explanation: 2 = 2^0 + 3^03 = 2^1 + 3^04 = 2^0 + 3^15 = 2^1 + 3^17 = 2^2 + 3^19 = 2^3 + 3^010 = 2^0 + 3^2Example 2:​Input: x = 3, y = 5, bound = 15Output: [2,4,6,8,10,14]​​Note:​1 <= x <= 1001 <= y <= 1000 <= bound <= 10^6`

`class Solution {vector<int> in={2};bool isValid(int x,int y,int num){    if(x==1 && y==1) return num==2;    if(num==x+1 || num == y+1) return true;    int lenx=log(double(num))/log(double(x));  //  cout <<lenx<<endl;    for(int i=0;i<=lenx;i++)    {        int tmp=num-pow(x,i);        if(tmp==0) return false;       if( pow(y,int(log(double(tmp))/log(double(y)))) ==tmp)  return true;    }    return false;}public:    vector<int> powerfulIntegers(int x, int y, int bound) {        vector<int>res;        if(bound<2) return res;        if(x==1&& y==1)         {           res.push_back(2);            return res;        }        if(x<y) swap(x,y);        if(y==1)         {            bound-=1;            int lenx= log(double(bound))/log(double(x)) ;            for(int i=0;i<=lenx;i++)                res.push_back(pow(x,i)+1);            return res;        }        res.push_back(2);        for(int start=y+1;start<=bound;start++)            if(isValid(x,y,start))                res.push_back(start);       // cout<<isValid(x,y,bound)<<endl;        return res;    }};`

`class Solution {public:    vector<int> powerfulIntegers(int x, int y, int bound) {        if(bound<2) return vector<int>();        int xm= x==1 ? 1: log(double(bound))/log(double(x));        int ym = y==1? 1: log(double(bound))/log(double(y));       // cout<<xm<<" "<<ym<<endl;        unordered_set<int>all;        for(int i=0;i<=xm;i++)        {        for(int j=0;j<=ym;j++)        {            int tmp=pow(x,i)+pow(y,j);      //     cout<<tmp<<endl;                     if(tmp>bound)                 break;                 else                if(!all.count(tmp))all.insert(tmp);        }                    }        return vector<int>(all.begin(),all.end());    }};`