首页 > 代码库 > hdu_5878_I Count Two Three(预处理)

hdu_5878_I Count Two Three(预处理)

题目链接:hdu_5878_I Count Two Three

题意:

给你一个n,让你找满足那个式子的不比n小的最小数

题解:

先上个预处理,然后二分查找就行

技术分享
 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=a;i<=b;i++) 3 using namespace std; 4 typedef long long ll; 5 ll dt[100000],ed; 6  7 ll pow_(ll a,ll k) 8 { 9     ll an=1;10     while(k){if(k&1)an*=a;k>>=1,a*=a;}11     return an;12 }13 14 int main()15 {16     ll a,b,c,d;17     F(i,0,40)18     {19         a=pow_(2,i);20         if(a>1e9)continue;21         F(j,0,40)22         {23             b=pow_(3,j);24             if(b>1e9||a*b>1e9)continue;25             F(k,0,40)26             {27                 c=pow_(5,k);28                 if(c>1e9||a*b*c>1e9)continue;29                 F(l,0,40)30                 {31                     d=pow_(7,l);32                     if(d>1e9||a*b*c*d>1e9)continue;33                     dt[++ed]=a*b*c*d;34                 }35             }36         }37     }38     sort(dt+1,dt+1+ed);39     int t,n;40     scanf("%d",&t);41     while(t--)scanf("%d",&n),printf("%lld\n",dt[lower_bound(dt+1,dt+1+ed,n)-dt]);42     return 0;43 }
View Code

 

hdu_5878_I Count Two Three(预处理)