[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!即使用浮点数也存不下了. 你的任务是找到阶乘最前面的非零位. ...
随机推荐
- JAVA实现生产消费者模型
前言 最近面试比较多,发现生产消费者模型在各公司面试的过程中问的还是比较多的,记录一下常见JAVA实现生产者消费模型的代码 思路 我们通过三种模式来实现 通过wait和notify 通过Lock和Co ...
- 页面background不随滚动条填充颜色
这我又遇到了个问题,这问题我连问都不知道该怎么问,先搁在这儿,如果有办法了,再来补充. 原因:因为颜色板块是100%宽度,和页面保持同宽,所以拖动滚动条,右侧就大于了页面宽度. bug: 我写页面的 ...
- 2-Harris角点检测
1. 何为角点? 下面有两幅不同视角的图像,通过找出对应的角点进行匹配. 再看下图所示,放大图像的两处角点区域: 我们可以直观的概括下角点所具有的特征: >轮廓之间的交点: >对于同一场景 ...
- [NOIP模拟23]题解
中间鸽了好几篇啊QAQ……有时间再补吧…… A.mine sbdp,考场上写的巨麻烦不过还是能A的(虽然MLE了……每一维都少开1就A掉了555).设$dp[i][j][k]$为枚举到第i位,第i位是 ...
- LInux多线程编程----线程属性pthread_attr_t
1.每个POSIX线程有一个相连的属性对象来表示属性.线程属性对象的类型是pthread_attr_t,pthread_attr_t 在文件/usr/include/bits/pthreadtypes ...
- 7、jmeter-定时器介绍与使用
jmeter-定时器介绍与使用 固定定时器 Uniform Random Timer Precise Throughput Timer Constant Throughput Timer 高斯随机定时 ...
- Day 16 : Python 时间模块[time,]datetime[]及第三方模块的下载与安装
在进行python程序开发时,除了可以使用python内置的标准模块外,还右许多第三方模块使用,可以在python官网找到. 在使用第三方模块时,需要下载并安装此模块,然后就可以使用标准模块一样导入并 ...
- TortoiseGit密钥设置
需要用到TortoiseGit的puttykey generator工具来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥. 1. 安装完成TortoiseGit后 ...
- redis数据结构之SDS
简介 redis源码虽然是C语言实现的,但是Redis没有直接采用C语言传统的字符串表示,而是构建了一种名叫简单动态字符串(simple dynamic string,SDS)的抽象类型,并将SDS用 ...
- Java中static关键字,this关键字
static修饰的成员方法和成员变量都是类方法和类变量,随类的加载而加载 static方法可以直接调用另一个static方法 static中调用普通方法可以通过类的实例对象调用 static不可以修饰 ...