把所有可能性打表,注意防溢出,upper函数求出答案
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <map>
#include <string>
#include <vector>
//#include <iostream>
using namespace std;
//for(i=1;i<n;i++)
//scanf("%d",&n);
//printf("\n",);
long long num[2000000];
long long poww(int num,int n)
{
long long temp=1;
for(long long i=1;i<=n;i++)
temp*=num;
return temp;
}
int main()
{
long long i,j,k,l,t,m,n,temp;
m=0;
for(i=0;i<=31;i++)//2
for(j=0;j<=19;j++)//3
for(k=0;k<=13;k++)//5
for(l=0;l<=11;l++)//7
{
temp=(long long)poww(2,i);
if(temp>1000000000) continue;
temp*=(long long)poww(3,j);
if(temp>1000000000) continue;
temp*=(long long)poww(5,k);
if(temp>1000000000) continue;
temp*=(long long)poww(7,l);
if(temp>1000000000) continue;
num[m]=temp;
m++;
}
sort(num,num+m);
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&n);
k=lower_bound(num,num+m,n)-num;
printf("%lld\n",num[k]);
}
return 0;
}