题目链接:

pid=3641">传送门

题意:

求最小的 ( x! ) = 0 mod (a1^b1*a2^b2...an^bn)

分析:

首先吧a1~an进行素因子分解,然后统计下每一个质因子的指数。因为随着x的增大,质因子的个数是逐渐添加的

因此我们能够二分x。对x!进行素因子分解推断是否满足条件。然后求出最小的就能够了。

代码例如以下:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int maxn = 110;
typedef long long LL;
bool vis[maxn];
int p[maxn],cnt;
LL a[maxn];
LL b[maxn];
LL num[maxn]; void init(){
cnt = 0;
memset(vis,0,sizeof(vis));
for(int i=2;i<maxn;i++){
if(!vis[i]){
p[cnt++]=i;
for(int j=i+i;j<maxn;j+=i)
vis[j]=1;
}
}
} LL get_num(LL x,int pri){
if(x<pri) return 0;
return get_num(x/pri,pri)+(LL)x/pri;
} bool check(LL x){
for(int i=0;i<cnt;i++){
if(get_num(x,p[i])<num[p[i]])
return false;
}
return true;
} int main()
{
init();
int t,n;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
memset(num,0,sizeof(num));
for(int i=0;i<n;i++){
scanf("%I64d%I64d",a+i,b+i);
int tmp = a[i];
for(int j=0;p[j]*p[j]<=tmp&&j<cnt;j++){
if(tmp%p[j]==0){
LL tot=0;
while(tmp%p[j]==0) tmp=tmp/p[j],tot++;
num[p[j]]+=tot*b[i];
}
}
if(tmp>1) num[tmp]+=b[i];
}
LL ans = 0;
for(int i=0;i<maxn;i++)
ans=max(ans,(LL)i*num[i]);
LL l=0,r=ans;
while(l<=r){
LL mid=(l+r)>>1;
if(check(mid)) r=mid-1;
else l=mid+1;
}
printf("%I64d\n",l);
}
return 0;
}
/*
111
6
6 1000000000000
15 1000000000000
13 1000000000000
7 1000000000000
2 1000000000000
3 1000000000000
*/

HDU 3641 Treasure Hunting(阶乘素因子分解+二分)的更多相关文章

  1. hdu 3641 Treasure Hunting 强大的二分

    /** 大意:给定一组ai,bi . m = a1^b1 *a2^b2 * a3^ b3 * a4^b4*...*ai^bi 求最小的x!%m =0 思路: 将ai 质因子分解,若是x!%m=0 那么 ...

  2. HDU 3468 Treasure Hunting(BFS+网络流之最大流)

    题目地址:HDU 3468 这道题的关键在于能想到用网络流.然后还要想到用bfs来标记最短路中的点. 首先标记方法是,对每个集合点跑一次bfs,记录全部点到该点的最短距离.然后对于随意一对起始点来说, ...

  3. 【网络流】 HDU 3468 Treasure Hunting

    题意: A-Z&&a-z 表示 集结点 从A点出发经过 最短步数 走到下一个集结点(A的下一个集结点为B ,Z的下一个集结点为a) 的路上遇到金子(*)则能够捡走(一个点仅仅能捡一次) ...

  4. [Codeforces 1201D]Treasure Hunting(DP)

    [Codeforces 1201D]Treasure Hunting(DP) 题面 有一个n*m的方格,方格上有k个宝藏,一个人从(1,1)出发,可以向左或者向右走,但不能向下走.给出q个列,在这些列 ...

  5. Codeforces Round #577 (Div. 2) D. Treasure Hunting

    Codeforces Round #577 (Div. 2)  D. Treasure Hunting 这个一场div2 前面三题特别简单,这个D题的dp还是比较难的,不过题目告诉你了只能往上走,所以 ...

  6. hdu 3641 数论 二分求符合条件的最小值数学杂题

    http://acm.hdu.edu.cn/showproblem.php?pid=3641 学到: 1.二分求符合条件的最小值 /*================================= ...

  7. hdu3468 Treasure Hunting 二分匹配

    //给一个n*m的图 //.表示空白地 //*表示有黄金 //#表示墙 //一个人须要依照A...Z..a..z的顺序以最短路径走到下一个 //每次仅仅能在他的路线上经过的地方取一块黄金 //问最多能 ...

  8. Treasure Hunting HDU - 3468

    题意: 输入一个n行m列的图 每次按字母顺序走最短路, 从一个字母走到下一个字母的过程中,只能拿走一个金子,求走完当前图中所有的字母后能拿到的金子的最大值 解析: bfs求最短路 对于一个金子如果 d ...

  9. (hdu)5652 India and China Origins 二分+dfs

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5652 Problem Description A long time ago there ...

随机推荐

  1. SQL Server 移动master 数据库

    第一步: 告诉SQL Server 下次启动时master数据库的文件在哪里!我想们一定想到了(这样做是不对的,它对master不起作用,第二步开始正确的做法) alter database mast ...

  2. css 问题总结

    background: <color> <image> <position> <attachment> <repeat>本文来自:佳木中国( ...

  3. 三篇编译libcurl,附下载 good

    http://download.csdn.net/detail/flyliying/2982867 http://download.csdn.net/detail/wojiushiwo987/9113 ...

  4. svn常见问题汇总

    has no ancestry information 经查,由于project/,01Dev/的权限被关闭了,把当前文件夹父目录(project/,01Dev/) 下的 .svn/ 目录删除就好了.

  5. mysql DBI 事务控制

    事务: 事务是任何健壮数据库系统的基本组成,它们 防止错误和数据库腐败通过确保有关数据的改变是原子发生的(不可分割的,要么所有要么什么都不做) 这个章节应用于数据库支持事务和 AutoCommit 是 ...

  6. poj3507---去掉最小值和最大值

    #include <stdio.h> #include <stdlib.h> int main() { ) { ,max=,min=,t; ; i<; i++) { sc ...

  7. Java学习笔记---继承和super的用法

    自从换了个视频教学,感觉比原来那个好多了,就是学校网速太渣,好多视频看一会卡半天,只能先看看已经下载的了. 不过也好,虽然不能从开始开始重新开,但是已经看过一次,在看一次也是好的,就当巩固学习了. 继 ...

  8. javascript高级知识点——函数原型

    代码信息来自于http://ejohn.org/apps/learn/. 向函数的原型中添加方法 function Ninja(){} Ninja.prototype.swingSword = fun ...

  9. html系列教程--元素

    HTML 元素语法 HTML 元素以开始标签起始 HTML 元素以结束标签终止 元素的内容是开始标签与结束标签之间的内容 某些 HTML 元素具有空内容(empty content) 空元素在开始标签 ...

  10. Block使用要点

    Block简介 Block其实包含两个部分内容 Block执行的代码,这是在编译的时候已经生成好的: 一个包含Block执行时需要的所有外部变量值的数据结构. Block将使用到的.作用域附近到的变量 ...