题目链接: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 }
时间: 2024-12-08 19:33:08