题目链接(http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1010)
题解:
因子只包含2 3 5的数为丑数,求出丑数打表,然后二分查找找到满足条件的数。
代码:
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
typedef long long LL;
const int MAX_N=2e4+7;
const LL N=1e18+100;
LL a[MAX_N];
int t=0;
void init() //求丑数
{
for(LL i=1;i<=N;i*=2)
for(LL j=1;j*i<=N;j*=3)
for(LL k=1;i*j*k<=N;k*=5)
a[t++]=i*j*k;
sort(a,a+t);
}
int main()
{
init();
int T;
LL n,l,r;
scanf("%d",&T);
while(T--){
scanf("%I64d",&n);
// l=1; r=t;
// while(l<r){
// int mid=(l+r)>>1;
// if(a[mid]>=n) r=mid;
// else l=mid+1;
// }
// printf("%I64d\n",a[l]);
LL d=lower_bound(a+1,a+t,n)-a;
printf("%I64d\n",a[d]);
}
return 0;
}