[JZOJ 5791] 阶乘
题意:求一个最小的\(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] 阶乘的更多相关文章
- JZOJ 5791 阶乘 —— 因数
题目:https://jzoj.net/senior/#main/show/5791 题意:有n个正整数a[i],设它们乘积为p,你可以给p乘上一个正整数q,使p*q刚好为正整数m的阶乘,求m的最小值 ...
- JZOJ 5791. 【NOIP2008模拟】阶乘
5791. [NOIP2008模拟]阶乘 (File IO): input:factorial.in output:factorial.out Time Limits: 1000 ms Memory ...
- [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_ ...
- C语言 · 阶乘计算 · 基础练习
问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*-*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个大整数a,A[0]表 ...
- 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 ...
- 关于for循环的几个小练习,例如奇数偶数,阶乘,求和等
1 .100以内的奇数和偶数 var js = ""; var os = ""; for(var i=1;i<101;i++) { if(i%2 == 0 ...
- [LeetCode] Factorial Trailing Zeroes 求阶乘末尾零的个数
Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in log ...
- 求单链表L各结点的阶乘之和(c语言)
链表需要用到指针 阶乘需要用到递归 链表中的注意事项: 1.链表L是否等于NULL ----------是循环结束的条件 2.链表L->Data ---------取链表L中各个结点的值 3.L ...
- 洛谷 P2726 阶乘 Factorials Label:Water
题目背景 N的阶乘写作N!,表示小于等于N的所有正整数的乘积. 题目描述 阶乘会变大得很快,如13!就必须用32位整数类型来存储,到了70!即使用浮点数也存不下了. 你的任务是找到阶乘最前面的非零位. ...
随机推荐
- div框,左右拖动
<script type="text/javascript"> function bindResize(el){ //初始化参数 var els = document. ...
- Vue学习笔记【6】——事件修饰符
.stop 阻止冒泡(阻止事件向外层冒泡) .prevent 阻止默认事件(链接跳转.表单提交) .capture 添加事件侦听器时使用事件捕获模式(从外到里触发事件) .self 只当事件在该元素本 ...
- 【TCP/IP】TCP的三次握手和四次挥手
传输控制协议(TCP)是一种面向连接的协议,网络程序使用这个协议的时候,网络可以保证客户端和服务端的连接是可靠的,安全的. 如果 A机向 B机发送“hello”,在物理网线上传输的数据不仅仅是“hel ...
- 【LeetCode 23】合并K个排序链表
题目链接 [题解] 会归并排序吧? 就把这K个链表当成是K个数字就好. 然后做归并排序. 因为归并排序的时候本来就会有这么一个过程. [l..mid]和[mid+1..r]这两段区间都是有序的了已经. ...
- Python每日一题 002
做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? 在此生成由数字,字母组成的20位字 ...
- AcWing 203. 同余方程 (线性同余方程)打卡
求关于x的同余方程 ax ≡ 1(mod b) 的最小正整数解. 输入格式输入只有一行,包含两个正整数a,b,用一个空格隔开. 输出格式输出只有一行,包含一个正整数x,表示最小正整数解. 输入数据保证 ...
- 让IE8兼容识别css3选择器——selectivizr-min.js
html: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ...
- layui多图上传
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Linux知识总结(更新中)
Linux知识总结(更新中) 如何查找特定的文件 find find path [options] params 作用:在指定目录下查找文件 检索文件内容 grep grep [options] pa ...
- 3. Python基础语法
注释 我们在文言文中经常会看到注释,注释可以帮助读者对文章的理解.代码中的注释也是一样,优秀的代码注释可以帮助读者对代码的理解.当然在代码编写过程中,注释的使用不一定只是描述一段代码,也可能的是对代码 ...