题意:求一个最小的\(m\),保证\(\prod a[i] * x = m!\)

思路:

考虑\(m!\)里面有多少个东西??

\(m\)个。

且是一个排列。

那么求一个最小的\(m\)使得前面的式子成立?

我们考虑如何统计\(m!\)中每个因子出现的次数?

\(m/(x^k)!\)

那么就好办了,我们对于序列中的每一个数直接分解质因数,统计每个数出现的次数。

因为\(m!\)中出现的次数不可能比序列中小,且如果\(m!\)中包含了所有的\(x\)就等于包含了序列。

那么直接二分判断数值即可。

时间复杂度:\(O(n \sum \sqrt{a[i]} + log INF)\)

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
const int INF = 1e8;
int prime[maxn];
int a[maxn];
int Mx;
int n;
int ans;
inline bool ok(int x) {
if(x < Mx) return 0;
for(int i = 2;i <= x && i <= Mx; ++i) {
if(!prime[i]) continue;
int sum = 0;
int tmp = x;
while(tmp) {
sum += tmp/i;
tmp /= i;
}
if(sum < prime[i]) {
return 0;
}
}
return 1;
}
int main () {
freopen("factorial.in","r",stdin);
freopen("factorial.out","w",stdout);
scanf("%d",&n);
for(int i = 1;i <= n; ++i) {
scanf("%d",&a[i]);
for(int j = 2;j * j<= (a[i]); ++j) {
while(a[i] % j == 0) {
prime[j] ++;
a[i] /= j;
Mx = max(Mx,j);
}
}
if(a[i] > 1) {
prime[a[i]] ++;
Mx = max(Mx,a[i]);
}
} int l = 0,r = INF;
while(l <= r) {
//cout<<l<<' '<<r<<endl;
int mid = (l + r) >> 1;
if(ok(mid)) {
r = mid - 1,ans = mid;
}
else l = mid + 1;
//cout<<ans<<endl;
}
printf("%d\n",ans);
return 0;
}

[JZOJ 5791] 阶乘的更多相关文章

  1. JZOJ 5791 阶乘 —— 因数

    题目:https://jzoj.net/senior/#main/show/5791 题意:有n个正整数a[i],设它们乘积为p,你可以给p乘上一个正整数q,使p*q刚好为正整数m的阶乘,求m的最小值 ...

  2. JZOJ 5791. 【NOIP2008模拟】阶乘

    5791. [NOIP2008模拟]阶乘 (File IO): input:factorial.in output:factorial.out Time Limits: 1000 ms  Memory ...

  3. [jzoj 6080] [GDOI2019模拟2019.3.23] IOer 解题报告 (数学构造)

    题目链接: https://jzoj.net/senior/#main/show/6080 题目: 题意: 给定$n,m,u,v$ 设$t_i=ui+v$ 求$\sum_{k_1+k_2+...+k_ ...

  4. C语言 · 阶乘计算 · 基础练习

    问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*-*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个大整数a,A[0]表 ...

  5. Java 计算N阶乘末尾0的个数-LeetCode 172 Factorial Trailing Zeroes

    题目 Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in ...

  6. 关于for循环的几个小练习,例如奇数偶数,阶乘,求和等

    1 .100以内的奇数和偶数 var js = ""; var os = ""; for(var i=1;i<101;i++) { if(i%2 == 0 ...

  7. [LeetCode] Factorial Trailing Zeroes 求阶乘末尾零的个数

    Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in log ...

  8. 求单链表L各结点的阶乘之和(c语言)

    链表需要用到指针 阶乘需要用到递归 链表中的注意事项: 1.链表L是否等于NULL ----------是循环结束的条件 2.链表L->Data ---------取链表L中各个结点的值 3.L ...

  9. 洛谷 P2726 阶乘 Factorials Label:Water

    题目背景 N的阶乘写作N!,表示小于等于N的所有正整数的乘积. 题目描述 阶乘会变大得很快,如13!就必须用32位整数类型来存储,到了70!即使用浮点数也存不下了. 你的任务是找到阶乘最前面的非零位. ...

随机推荐

  1. JAVA实现生产消费者模型

    前言 最近面试比较多,发现生产消费者模型在各公司面试的过程中问的还是比较多的,记录一下常见JAVA实现生产者消费模型的代码 思路 我们通过三种模式来实现 通过wait和notify 通过Lock和Co ...

  2. Java虚拟机(一)

    一.Java发展历程 Java之父,James Gosling博士 时间 事件 1991年4月 James Gosling博士领导的Green Project启动,java语言前身Oak启动 1995 ...

  3. mongodb4.0数据库权限配置

    今天给大家分享一个关于mongodb数据库权限配置的小知识点,这里呢,我用的是mongodb4.0版本,下载地址:https://www.mongodb.com/download-center/com ...

  4. 【记录】spring boot 图片上传与显示

    问题:spring boot 使用的是内嵌的tomcat, 文件上传指定目录时不知道文件上传到哪个地方,不知道访问路径. //部署到服务器的tomcat上时通常使用这种方式request.getSer ...

  5. php-数据库-分页类-上传类

    config.ini.php <?php header("content-type:text/html;charset=utf-8"); //项目的根目录 define(&q ...

  6. Android中TextView不获取焦点可以实现跑马灯的效果

    之前在网上找了很多关于TextView的跑马灯效果实现的例子,实现起来都存在一些问题,例如一种是完全重画一个跑马灯,还有就是只设置TextView的相关属性使其具有跑马灯的效果,总的来说这两种方法都是 ...

  7. 1242 斐波那契数列的第N项

    1242 斐波那契数列的第N项  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题   斐波那契数列的定义如下:   F(0) = 0 F(1) = 1 F(n) = F( ...

  8. 贪婪算法--Python

    贪婪算法:每步都采取最优的做法,即每步都选择局部最优解,最终得到的就是全局最优解. 假设你办了个广播节目,要让全美50个州的听众都收听得到.为此你需要决定在哪些广播台播出.在每个广播台播出都需要支付费 ...

  9. linux进阶之路(一):linux入门

    Linux:开源.免费得开源系统.具有高效性.稳定性.安全性.处理多并发. Linux的发行版本:基于Linux,不同的安装软件 CentOS(RedHat开源版本) RedHat Ubuntu Su ...

  10. java中trim()方法是用来干什么的?

    trim()的作用是去掉字符串两端的多余的空格,注意,是两端的空格,且无论两端的空格有多少个都会去掉,当然 中间的那些空格不会被去掉,如: String s = "  a s f g     ...