JZOJ 5791 阶乘 —— 因数
题目:https://jzoj.net/senior/#main/show/5791
题意:有n个正整数a[i],设它们乘积为p,你可以给p乘上一个正整数q,使p*q刚好为正整数m的阶乘,求m的最小值。
对于10%的数据,n<=10
对于30%的数据,n<=1000
对于100%的数据,n<=100000,a[i]<=100000
首先,p * q = m!,也就是 p 是 m! 的一个因数;
把 p 质因数分解,那么 m! 的每个对应质因数的次数都 >= p 中对应质因数的次数;
不必乘出来 p,只要把每个 a[i] 质因数分解即可;
对于 m!,统计质因数的次数就是 cnt[i] += m / pri[i] , m /= pri[i],证明之类的很好想啦。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int const maxn=1e5+,inf=1e9;
int n,a[maxn],p[maxn],ans,mx,pri[maxn],cnt;
bool ck(int x)
{
if(x<mx)return ;
for(int i=,t,tmp;i<=x&&i<=mx;i++)
{
if(!p[i])continue;
t=; tmp=x;
while(tmp)t+=tmp/i,tmp/=i;
if(t<p[i]){/*printf("t=%d p[%d]=%d\n",t,i,p[i]);*/ return ;}
// printf("x=%d t=%d p[%d]=%d\n",x,t,i,p[i]);
}
return ;
}
int main()
{
freopen("factorial.in","r",stdin);
freopen("factorial.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
for(int j=;j*j<=a[i];j++)
while(a[i]%j==)p[j]++,a[i]/=j,mx=max(mx,j);
if(a[i]>)p[a[i]]++; mx=max(mx,a[i]);
}
int l=,r=inf;
while(l<=r)
{
int mid=((l+r)>>);
// printf("l=%d r=%d mid=%d ck=%d\n",l,r,mid,ck(mid));
if(ck(mid))ans=mid,r=mid-;
else l=mid+;
}
printf("%d\n",ans);
return ;
}
JZOJ 5791 阶乘 —— 因数的更多相关文章
- [JZOJ 5791] 阶乘
题意:求一个最小的\(m\),保证\(\prod a[i] * x = m!\) 思路: 考虑\(m!\)里面有多少个东西?? \(m\)个. 且是一个排列. 那么求一个最小的\(m\)使得前面的式子 ...
- JZOJ 5791. 【NOIP2008模拟】阶乘
5791. [NOIP2008模拟]阶乘 (File IO): input:factorial.in output:factorial.out Time Limits: 1000 ms Memory ...
- 阶乘 求n!中质因数的个数
在n!中末尾有几个0 取决于n!中5的个数(2肯定比5多) 所以遍历从1到n的数,看总共有几个5即可 ..N do j = i; == ) ++ret; j /= ; end end 有个nb的方法: ...
- bzoj 3283: 运算器 扩展Baby Step Giant Step && 快速阶乘
3283: 运算器 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 184 Solved: 59[Submit][Status][Discuss] D ...
- n!(n的阶乘)
我们在这里介绍一些关于n!的性质. 在计数问题中,经常需要用到n!.有必要了解n!在mod p下的一些性质.下面我们假设p是素数,n!=ape(a无法被p整除),并试图求解e和a mod p(把这个东 ...
- CodeForces - 633B A Trivial Problem 数论-阶乘后缀0
A Trivial Problem Mr. Santa asks all the great programmers of the world to solve a trivial problem. ...
- luogu1445 [violet]樱花 阶乘分解
题目大意 求方程$$\frac{1}{x}+\frac{1}{y}=\frac{1}{N!}$$的正整数解的组数. 思路 咱们把式子整理得$$xy-(x+y)N!=0$$.$xy$和$x+y$?貌似可 ...
- [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_ ...
- 【数论】[因数个数]P4167樱花
题目描述 求不定方程 \(\frac {1}{x} + \frac{1}{y} = \frac{1}{n!}\)的正整数解的个数 \(n \leq 100^6\) Solution 化简得 \(x * ...
随机推荐
- ORB-SLAM2:一种开源的VSLAM方案(译文)
摘要: ORB-SLAM2是基于单目,双目和RGB-D相机的一套完整的SLAM方案.它能够实现地图重用,回环检测和重新定位的功能.无论是在室内的小型手持设备,还是到工厂环境的无人机和城市里驾驶的汽车, ...
- c# 常用 Common
/// <summary> /// md5加密字符串 /// </summary> /// <param name="message">< ...
- css--小白入门篇3
一.上篇知识复习 css属性,面试的时候会有笔试,笔试没有智能感应的: ● 加粗,倾斜,下划线: 1 font-weight:bold; 2 font-style:italic; 3 text-dec ...
- mysql insert一条记录后 返回创建记录主键id的方法
mysql插入数据后返回自增ID的方法 mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得 ...
- python之cookbook-day03
第一章:数据结构和算法 1.3 保留最后 N 个元素 问题: 在迭代操作或其他操作的时候,怎样只保留最后有限几个元素的历史记录? 解决方案: 保留有限历史记录正是 collections.deque ...
- python之cookbook-day02
第一章:数据结构和算法 1.2 解压可迭代对象赋值给多个变量 问题: 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError .那么 怎样才能从这个可迭代对象中解压出 N 个元素 ...
- DemoKit编译过程错误
1.编译出错: 2.原因(将代码注释):
- java,有用的代码片段
在我们写程序的过程中,往往会经常遇到一些常见的功能.而这些功能或效果往往也是相似的,解决方案也相似.下面是我在写代码的过程中总结的一些有用的代码片段. 1.在多线程环境中操作同一个Collection ...
- java中String,int,Integer,char、double类型转换
java中String,int,Integer,char.double类型转换----https://www.cnblogs.com/kangyu222/p/5866025.html
- 抽象类和接口有什么区别---https://blog.csdn.net/csdn_aiyang/article/details/71171886
https://blog.csdn.net/csdn_aiyang/article/details/71171886 概念] 抽象类.具体类是相对的,并非绝对的.抽象是一种概念性名词,具体是一种可 ...