题意就是给定一个n,求不小于n的一个只有2,3,5,7为因子构成的数(包括1)
思路预处理出所有的满足的数,然后二分一下就好了。
#include<bits/stdc++.h>
#define maxn 1000000000
using namespace std;
int x[5]={1,2,3,5,7};
int x2[5]={1,30,19,13,11};
long long a[5555];
int tt=0;
void dfs(int pos,long long ans) {
if(pos==5) {
a[++tt]=ans;
return;
}
for(int i=0;i<=x2[pos];i++) {
if(i!=0)
ans*=x[pos];
if(ans>maxn) {
break;
}
dfs(pos+1,ans);
}
}
int main()
{
dfs(1,1);
long long n;
sort(a+1,a+tt+1);
int t;
scanf("%d",&t);
while(t--) {
scanf("%lld",&n);
int head=1,wei=tt;
while(head<wei) {
int mid=(head+wei)/2;
if(a[mid]<n) {
head=mid+1;
}
else {
wei=mid;
}
}
printf("%lld\n",a[head]);
}
return 0;
}