• 51nod1010(枚举+二分)


    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1010

    题意:中文题诶~

    思路:求第一个比 x (1<=x<=1e18)大或者等于的数y, 且y的因子只有2, 3, 5,即y=pow(2, i)*pow(3, j)*pow(5, k);

    那么显然我们可以通过枚举i, j, k求出所有由2, 3, 5因子构成的数,并将其存入数组中,再二分查找数组中第一个大于等于x的数即为答案;

    代码:

     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 #define MAXN 100000
     4 using namespace std;
     5 
     6 ll a[MAXN];
     7 const ll inf=1e18;
     8 
     9 ll get_pow(ll x, int n){
    10     ll ans=1;
    11     while(n){
    12         if(n&1){
    13             ans*=x;
    14         }
    15         x*=x;
    16         n>>=1;
    17     }
    18     return ans;
    19 }
    20 
    21 void geloutingyu(void){ //**注意不能直接用pow(),会有精度问题
    22     int pos=0;
    23     for(ll i=0; get_pow(2, i)<=inf; i++){
    24         for(ll j=0; get_pow(2, i)*get_pow(3, j)<=inf; j++){
    25             for(ll k=0; get_pow(2, i)*get_pow(3, j)*get_pow(5, k)<=inf; k++){
    26                 a[pos++]=get_pow(2, i)*get_pow(3, j)*get_pow(5, k);
    27             }
    28         }
    29     }
    30 }
    31 
    32 int main(void){
    33     int t;
    34     ll x;
    35     geloutingyu();
    36     sort(a, a+MAXN);
    37     cin >> t;
    38     while(t--){
    39         cin >> x;
    40         if(x==1){
    41             cout << 2 << endl;
    42             continue;
    43         }
    44         int pos=lower_bound(a, a+MAXN, x)-a;
    45         cout << a[pos] << endl;
    46     }
    47     return 0;
    48 }
  • 相关阅读:
    Vue基础第三章
    Vue基础第二章
    Vue基础第一章
    AWS笔记
    导入Dynamic Web Project后程序有红叉但是可以运行
    JSTL配置文件下载地址
    access纯jdbc连接
    XML学习总结二——DTD
    【转】无题
    XML学习总结一
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/6279701.html
Copyright © 2020-2023  润新知