题意:
问大于n且离n最近的,可以写成2^a*3^b*5^c*7^d形式的数
思路:
预处理出来可以写成这种形式的所有数,因为n最大是1e9,设2^a=1e9,两边同取log,变成alog2=9log10,所以a最大是36,依次计算bcd,然后暴力计算
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define max_ 1000000000
vector<ll>v;
vector<ll>::iterator it;
ll fpow(ll a,ll b)
{
if(b==0)
return 1;
ll ans=1;
ll tmp=a;
while(b)
{
if(b&1)
ans=ans*tmp;
tmp=tmp*tmp;
b/=2;
}
return ans;
}
void init()
{
for(int a=0;a<=40;a++)
{
for(int b=0;b<=30;b++)
{
for(int c=0;c<=18;c++)
{
for(int d=0;d<=18;d++)
{
ll x=fpow(2,a)*fpow(3,b)*fpow(5,c)*fpow(7,d);
if(x<=max_)
{
v.push_back(x);
}
else
break;
}
}
}
}
sort(v.begin(),v.end());
}
int n;
int main()
{
init();
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
it=lower_bound(v.begin(),v.end(),n);
printf("%lld\n",*it);
}
}