题目:###


描述##

有n个正整数a[i],设它们乘积为p,你可以给p乘上一个正整数q,使p*q刚好为正整数m的阶乘,求m的最小值。

输入##

共两行。

第一行一个正整数n。

第二行n个正整数a[i]。

输出##

共一行

一个正整数m。

样例输入##

1

6

样例输出##

3


看到这个题目描述只有一行我心头就涌上一股不祥的预感……

一般这种题……都比较……那啥……

(是的,这个题我又写炸了……

好的让我们来分析一下这道题:

分析:###

首先我们可以知道,如果一个数的阶乘对输入的数的乘积取模等于零(实际上就是它的倍数),那么这个数m!一定是包含了输入数据相乘的所有质因子的,所以我们在读入数据的时候先把每个数都分解一下质因子,然后存储每个质因子出现的次数。

然后我们来感性理解一个奇怪的结论:

举一个例子:30!中有多少个质因子3?

首先我们把含有3的乘数提取出来,大概长这个样:

3 6 9 12 15 18 21 24 27 30

其中每个数对应含有因子3的个数为: 1 1 2 1 1 2 1 1 3 1

看出什么规律了吗? 每两个一次项过后是一个二次项,每两个二次项过后是一个三次项,后面的规律可以以此类推。

那么这个结论是不是正确的呢?我们感性理解一下:

每一个数都除以一个3,得到的结果是: 1 2 3 4 5 6 7 8 9 10

是不是相当于降下来了一次? 这个时候原先含有一个3的数已经不含3了,而原先含有两个3(二次项)的变成了含有一个3。

较为普适的结论要看这个图理解(我终于稍微不那么感性地搞出了这个玩意……):

这个结论有什么用呢?事实是,用一个函数模拟上面降次的过程,就可以求出x的阶乘中含有的每个质因子的个数。

又显然,m是具有单调性的,即如果(m_i)!是符合题意的数,那么(m_j)!(其中j>i)一定也是符合题意的数(因为(m_j)!%(m_i)!==0),所以我们考虑二分一个m,然后用上面得出的结论来验证m

然后就出答案啦OvO


代码:###

#include<bits/stdc++.h>
using namespace std;
int prime[100005],n,max_prime=-1,x;
inline long long read(){
long long cnt=0,f=1;char c;
c=getchar();
while(!isdigit(c)){if(c=='-')f=-f;c=getchar();}
while(isdigit(c)){cnt=cnt*10+c-'0';c=getchar();}
return cnt*f;
}
bool check(int x){
if(x<max_prime)return false; //如果x已经小于了最大的质因子max_prime,那么x!中一定不含有 max_prime这个质因子,直接return false
for(register int i=2;i<=max_prime;i++){
if(!prime[i])continue;
int xx=x,t=0;
while(xx){
t+=xx/i;
xx/=i;
}
if(t<prime[i])return false; //如果发现这个数的阶乘中某一个质因子的次数小于输入中的质因子的次数则非法
}
return true;
}
int main(){
n=read();
for(register int i=1;i<=n;i++){
x=read();
for(register int j=2;j<=sqrt(x);j++)
while(x%j==0)x/=j,prime[j]++,max_prime=max(max_prime,j);
if(x>1)prime[x]++,max_prime=max(max_prime,x);
}
int l=1,r=1e9;
while(l<r){
int mid=(l+r)>>1;
if(check(mid))r=mid;
else l=mid+1;
}
printf("%d",l);
return 0;
}

[NOIP2018校模拟赛]T1 阶乘的更多相关文章

  1. [NOIP2018校模拟赛]T1聚会 party

    题目链接: 聚会 分析: 设每个点到1号点的距离为dist_{i},每个点的权值为x_{i},目标点到1号点的距离为dist,权值为x,那么对于每一次查询,我们讨论三种情况: ① 目标家庭在区间左边( ...

  2. [NOIP2018校模拟赛]T2矩阵分组 Matrix

    题目链接: 矩阵分组 分析: 这道题求的是两部分极差当中大的那个的最小值.对于这种求最值的问题,我们很自然(其实并没有)地想到二分答案. 这个题有两个结论: (好像当时看出来了第一个?然后发现下面都不 ...

  3. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  4. NOI.AC: NOIP2018 全国模拟赛习题练习

    闲谈: 最后一个星期还是不浪了,做一下模拟赛(还是有点小虚) #30.candy 题目: 有一个人想买糖吃,有两家商店A,B,A商店中第i个糖果的愉悦度为Ai,B商店中第i个糖果的愉悦度为Bi 给出n ...

  5. 20180610模拟赛T1——脱离地牢

    Description 在一个神秘的国度里,年轻的王子Paris与美丽的公主Helen在一起过着幸福的生活.他们都随身带有一块带磁性的阴阳魔法石,身居地狱的魔王Satan早就想着得到这两块石头了,只要 ...

  6. NOIP欢乐模拟赛 T1 解题报告

    小澳的方阵 (matrix.cpp/c/pas) [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑 ...

  7. [模拟赛] T1 高级打字机

    Description 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小 ...

  8. 【洛谷】NOIP2018原创模拟赛DAY1解题报告

    点此进入比赛 T1:小凯的数字 题意:给定q个l,r,求l(l+1)(l+2)...(r-1)r模9的结果 很显然,这是道考验数(运)学(气)的题目 结论:输出\((l+r)*(r-l+1)\over ...

  9. 2019.2.25 模拟赛T1【集训队作业2018】小Z的礼物

    T1: [集训队作业2018]小Z的礼物 我们发现我们要求的是覆盖所有集合里的元素的期望时间. 设\(t_{i,j}\)表示第一次覆盖第i行第j列的格子的时间,我们要求的是\(max\{ALL\}\) ...

随机推荐

  1. Spyder的汉化

    我准备写下spyder的汉化问题:对于英文大佬,从来没得汉化问题,但是对于新手和英语差的来说,汉化还是有必要,至少用汉化过得软件能快速掌握软件等.后期会用软件了在慢慢习惯英文也不迟...哈哈哈哈.本文 ...

  2. Linux input子系统实例分析(一)

    这是一个简单的输入设备驱动实例.这个输入设备只有一个按键,按键被连接到一条中断线上,当按键被按下时,将产生一个中断,内核将检测到这个中断,并对其进行处理.该实例的代码如下:     1: #inclu ...

  3. 【iOS系列】-自定义Modar动画

    [iOS系列]-自定义Modar动画.md 我们需要做的最终的modar动画的效果是这样的, 就是点击cell,cell发生位移,慢慢的到第二个界面上的.为了做出这样的动画效果,我们需要以下的知识. ...

  4. React Native安装

    1.安装 1.1 安装Node.js 下载安装即可 1.2 安装Homebrew 终端中执行: $ /usr/bin/ruby -e "$(curl -fsSL https://raw.gi ...

  5. npm ERR! code EINTEGRITY npm ERR! sha1- 报错解决办法

    npm ERR! code EINTEGRITY npm ERR! sha1- 报错日志 npm ERR! code EINTEGRITY npm ERR! sha1-OGchPo3Xm/Ho8jAM ...

  6. RDLC后台自己定义报表模板

    首先封装一个公共类,统一来操作RDLC报表 using System; using System.Collections.Generic; using System.Linq; using Syste ...

  7. ExtJs4.2 开发问题总结

    1. 在开发treegrid中,store属性autoLoad:false没有作用,还会默认自动加载.目前解决办法在control下监听treegrid的afterrender,当加载完后,再调一次s ...

  8. Lily HBase Indexer同步HBase二级索引到Solr丢失数据的问题分析

    一.问题描述二.分析步骤2.1 查看日志2.2 修改Solr的硬提交2.3 寻求StackOverFlow帮助2.4 修改了read-row="never"后,丢失部分字段2.5 ...

  9. RK3399参考设计方案之DC-DC电源芯片RK808D【转】

    本文转载自:http://www.52rd.com/Blog/Detail_RD.Blog_sunnyqi_90673.html?WebShieldDRSessionVerify=Xv0bsGtD73 ...

  10. POJ - 2142 The Balance(扩展欧几里得求解不定方程)

    d.用2种砝码,质量分别为a和b,称出质量为d的物品.求所用的砝码总数量最小(x+y最小),并且总质量最小(ax+by最小). s.扩展欧几里得求解不定方程. 设ax+by=d. 题意说不定方程一定有 ...