[51nod 1010] 只包含因子2 3 5的数

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

原文地址:https://www.cnblogs.com/mollnn/p/12358638.html