51nod1010----只包含因子2 3 5的數
阿新 • • 發佈:2018-12-25
思路:
因子只包含2 3 5的數字呢 往後找找 你會發現 並沒有很多 雖然範圍是1e18 但是符合條件的數字也並沒有超過1e6個
我們先預處理篩選一下
然後 剩下的問題就是查找了 用一下stl裡面帶的二分查詢函式來找比它大的數就好了
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> typedef long long ll; const ll maxn=1e18+100; using namespace std; ll a[1000007]; ll cnt,x; void solve(){ for(ll i=1;i<maxn;i*=2){ for(ll j=1;j*i<maxn;j*=3){ for(ll k=1;k*j*i<maxn;k*=5){ a[cnt++]=i*j*k; } } } sort(a,a+cnt); } int T; int main(){ solve(); scanf("%d",&T); while(T--){ scanf("%lld",&x); int n=lower_bound(a+1,a+cnt,x)-a;//第0個數是1 排除掉 printf("%lld\n",a[n]); } return 0; }