【HDU5878】I Count Two Three(打表+二分)
2016-09-22 18:36
183 查看
记录一个菜逼的成长。。
题目大意:
给你一个数n,求大于n的最小的满足2^a3^b5^c7^d的数。
题目大意:
给你一个数n,求大于n的最小的满足2^a3^b5^c7^d的数。
//#pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <iostream> #include <cstring> #include <string> #include <algorithm> #include <cstdlib> #include <vector> #include <set> #include <map> #include <queue> #include <stack> #include <list> #include <deque> #include <cctype> #include <bitset> #include <cmath> using namespace std; #define ALL(v) (v).begin(),(v).end() #define cl(a) memset(a,0,sizeof(a)) #define bp __builtin_popcount #define pb push_back #define fin freopen("D://in.txt","r",stdin) #define fout freopen("D://out.txt","w",stdout) #define lson t<<1,l,mid #define rson t<<1|1,mid+1,r #define seglen (node[t].r-node[t].l+1) #define pi 3.1415926 #define e 2.718281828459 typedef long long LL; typedef unsigned long long ULL; typedef pair<int,int> PII; typedef pair<LL,LL> PLL; typedef vector<PII> VPII; const int INF = 0x3f3f3f3f; const int MOD = 1e9 + 7; template <typename T> inline void read(T &x){ T ans=0; char last=' ',ch=getchar(); while(ch<'0' || ch>'9')last=ch,ch=getchar(); while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar(); if(last=='-')ans=-ans; x = ans; } inline bool DBread(double &num) { char in;double Dec=0.1; bool IsN=false,IsD=false; in=getchar(); if(in==EOF) return false; while(in!='-'&&in!='.'&&(in<'0'||in>'9')) in=getchar(); if(in=='-'){IsN=true;num=0;} else if(in=='.'){IsD=true;num=0;} else num=in-'0'; if(!IsD){ while(in=getchar(),in>='0'&&in<='9'){ num*=10;num+=in-'0';} } if(in!='.'){ if(IsN) num=-num; return true; }else{ while(in=getchar(),in>='0'&&in<='9'){ num+=Dec*(in-'0');Dec*=0.1; } } if(IsN) num=-num; return true; } template <typename T> inline void write(T a) { if(a < 0) { putchar('-'); a = -a; } if(a >= 10) write(a / 10); putchar(a % 10 + '0'); } /******************head***********************/ LL mod_mul(LL a,LL b) { LL res = 0; while(b){ if(b & 1){ res = (res + a); } b >>= 1; a = (a + a); } return res; } LL Power(LL a,LL n) { LL ans = 1; while(n){ if(n&1)ans *= a;; n /= 2; a *= a; } return ans; } const int maxn = 1000000 + 10; LL num[maxn]; int main() { LL a,b,c,d,tmp; int ind = 0; //要保证单独的数的幂都要超过10^9 for( int i = 0; i < 31; i++ ){ for( int j = 0; j < 20; j++ ){ for( int k = 0; k < 16; k++ ){ for( int o = 0; o < 13; o++ ){ a = Power(2,i),b = Power(3,j),c = Power(5,k),d = Power(7,o); tmp = mod_mul(a,b); tmp = mod_mul(tmp,c); tmp = mod_mul(tmp,d); num[ind++] = tmp; } } } } sort(num,num+ind); int T; scanf("%d",&T); while(T--){ LL n; scanf("%lld",&n); int pos = lower_bound(num,num+ind,n) - num; printf("%lld\n",num[pos]); } return 0; }
相关文章推荐
- HDU5878 I Count Two Three【打表+排序+二分搜索】
- I Count Two Three---hdu5878(打表+二分)
- hdu 5878 I Count Two Three【预处理打表+二分】
- HDU 5878 I Count Two Three (打表+二分查找) -2016 ICPC 青岛赛区网络赛
- 暴力求解法--打表 hdu5878 I count Two Three
- HDOJ 5878 I Count Two Three 【2016青岛网赛】暴力打表+二分枚举
- 2016 ACM/ICPC 青岛区域赛网络赛 1001 I Count Two Three(打表+二分)
- 2016 ACM/ICPC Asia Regional Qingdao Online 1001 I Count Two Three(打表+二分搜索)
- HDU 5878 I Count Two Three(打表加二分)
- 1001 I Count Two Three(打表+二分 用lower_bound函数)
- hdu5878 I Count Two Three(水题)
- [HDOJ5878]I Count Two Three(暴力枚举,二分)
- hdu I Count Two Three(二分查找&&打表)
- hdu5878 I Count Two Three -ICPC网络赛青岛赛区
- 【HDU 5878】I Count Two Three(预处理+二分)
- HDU 5878 I Count Two Three (dfs+二分)
- HDU 5878 I Count Two Three (DFS预处理 + 二分)
- hdu 5878 I Count Two Three 丑数 二分
- HDU 5878 I Count Two Three(打表)qingdao网赛
- hdu 5878 I Count Two Three(二分)