K的因子中只包含2 3 5。满足条件的前10个数是:2,3,4,5,6,8,9,10,12,15。
所有这样的K组成了一个序列S,现在给出一个数n,求S中 >= 给定数的最小的数。
例如:n = 13,S中 >= 13的最小的数是15,所以输出15。
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll MAXN = 1e18+1000; ll a[110000]; int cnt; void init(){ cnt=0; for(ll i=1;i<MAXN;i*=2){ for(ll j=1;i*j<MAXN;j*=3){ for(ll k=1;_____(1)______<MAXN;k*=5){ a[cnt++]=i*j*k; } } } sort(a,a+cnt); } int main(){ int T; init(); cin>>T; while(T--){ ll n,ans; scanf("%lld",&n); if(n<=2) _____(2)______; else{ ll l=0,r=______(3)________ ll mid; while(l<r){ ______(4)________ if(a[mid]>=n) r=mid; else ______(5)________ } ans=a[r]; } printf("%lld\n",ans); } return 0; }