求只包含因子2 3 5的数中 (geq x) 的最小的数 ((x leq 10^{18}))
Solution
显然数字的个数很少,我们暴力搞出所有的数字 (sort) 一下,然后每次二分就可以了
#include <bits/stdc++.h>
using namespace std;
#define int long long
vector <int> v;
const int mod = 4e18+7;
int qpow(int p,int q) {
return ((q&1)?p:1)*(q?qpow(p*p%mod,q/2):1)%mod;
}
signed main() {
for(int i=0;i<=70;i++) {
for(int j=0;j<=60;j++) {
for(int k=0;k<=50;k++) {
if(pow(2,i)*pow(3,j)*pow(5,k)<4e18 && i+j+k>0) {
v.push_back(qpow(2,i)*qpow(3,j)*qpow(5,k));
}
}
}
}
sort(v.begin(),v.end());
int t,n;
cin>>t;
while(t--) {
cin>>n;
cout<<(*lower_bound(v.begin(),v.end(),n))<<endl;
}
}