时间限制: 1 Sec 内存限制: 128 MB
题目描述
给你一个数字n,找出大于等于n的最小的,质因数只有2,3,5,7的数。
输入
第一行输入一个数字T,表示有T组测试数据,1 <= T <= 500000
之后T行,每一行有一个数字n,0 <= n <= 109
输出
对每个样例,皆输出一个数字表示答案。
样例输入
5 1 11 111 1111 11111
样例输出
210 210 210 1260 11340
这道题要用打表一个一个判断会超时。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int a[5] = {2,3,5,7};
long long b[10000 + 5];
int main(){
int m = 1;
priority_queue<long long , vector<long long> , greater<long long > > k;
set<long long> s;
k.push(210);
s.insert(210);
b[0] = 210;
for(int i = 1;i <=1700 ;i++){
long long x = k.top();
k.pop();
for(int j = 0;j < 4;j++){
long long x2 = x*a[j];
if(!s.count(x2)){
s.insert(x2);
k.push(x2);
b[m++] = x2;
}
}
}
sort(b,b + m);
int h;
scanf("%d",&h);
while(h--){
long long w;
scanf("%ld",&w);
int y = lower_bound(b,b+m,w) - b;
printf("%ld\n",b[y]);
}
return 0;
}