1. 程式人生 > >51nod1010----只包含因子2 3 5的數

51nod1010----只包含因子2 3 5的數

 

思路:

因子只包含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;
}