I Count Two Three
可以预处理出所有的满足题目并且比1e9小的的数,不会很多。排个序。询问的时候二分查找就好了
#include<bits/stdc++.h>
using namespace std;
#define int long long
int T,x,tot,a[10000007];
const int MAXN=1e9;
void init() {
int p2=1,p3=1,p5=1,p7=1;
for(int i=0;i<=30;++i) {
p3=1;
for(int j=0;j<=30;++j) {
if(p2*p3>MAXN)break;
p5=1;
for(int k=0;k<=30;++k) {
if(p2*p3*p5>MAXN)break;
p7=1;
for(int l=0;l<=30;++l) {
if(p2*p3*p5*p7>MAXN)break;
a[++tot]=p2*p3*p5*p7;
//cout<<a[tot]<<endl;
p7*=7;
}
p5*=5;
}
p3*=3;
}
p2*=2;
if(p2>MAXN)break;
}
sort(a+1,a+tot+1);
}
signed main() {
init();
scanf("%lld",&T);
while(T--) {
scanf("%lld",&x);
printf("%lld\n",a[lower_bound(a+1,a+tot+1,x)-a]);
}
return 0;
}
路漫漫其修远兮,吾将上下而求索