zoukankan      html  css  js  c++  java
  • hdu 3641 Treasure Hunting 强大的二分

     1 /**
     2 大意:给定一组ai,bi .    m = a1^b1 *a2^b2 * a3^ b3 * a4^b4*...*ai^bi 
     3 求最小的x!%m =0
     4 思路: 将ai 质因子分解,若是x!%m=0 那么x! 质因子分解之后 质因子的个数一定大于等于m的个数。二分求解可得
     5 注意: 二分时,需要将,上下限 设定好,low =0; high = 1ll<<60;
     6 **/
     7 
     8 #include <iostream>
     9 #include <cstring>
    10 #include <cmath>
    11 using namespace std;
    12 
    13 long long pri[150];
    14 
    15 void getApri(long long a,long long b){
    16     int cnt;
    17     for(int i=2;i*i<=a;i++)if(a%i==0){
    18         cnt =0;
    19         while(a%i==0){
    20             cnt++;
    21             a =a/i;
    22         }
    23         pri[i] += cnt*b;
    24         if(a==1)
    25             break;
    26     }
    27     if(a>1)
    28         pri[a] += b;
    29 }
    30 
    31 long long cal(long long i,long long x){   x!中有多少个i因子
    32     long long ret =0;
    33     while(x){
    34         x = x/i;
    35         ret += x;
    36     }
    37     return ret;
    38 }
    39 
    40 bool judge(long long x){
    41     for(int i=1;i<=100;i++)if(pri[i]){
    42         long long tmp = cal(i,x);
    43         if(tmp<pri[i])
    44             return false;
    45     }
    46     return true;
    47 }
    48 
    49 int main(){
    50     int t;
    51     cin>>t;
    52     while(t--){
    53         memset(pri,0,sizeof(pri));
    54         int n;
    55         cin>>n;
    56         long long a,b;
    57         while(n--){
    58             cin>>a>>b;
    59             getApri(a,b);
    60         }
    61         long long low = 0,high = 1ll<<60;
    62         long long ans;
    63         while(low<=high){
    64             long long mid  = (low+high)/2;
    65             if(judge(mid)){
    66                 ans = mid;
    67                 high  = mid-1;
    68             }
    69             else
    70                 low = mid +1;
    71         }
    72         cout<<ans<<endl;
    73     }
    74 
    75     return 0;
    76 }
  • 相关阅读:
    Unity Ioc框架简单例子
    Newtonsoft.Json.Linq
    Quartz.net
    AngularJS
    Zookeeper
    mysql 游标CURSOR
    mysql 存储过程 CONCAT 字符串拼接
    MD5Util
    生成缩略图
    Asp.net MVC 基于Area的路由映射
  • 原文地址:https://www.cnblogs.com/Bang-cansee/p/3724071.html
Copyright © 2011-2022 走看看