题目:###


描述##

有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. (转) Universal-Image-Loader使用大全(史上最屌)

    转载自http://blog.csdn.net/zenjj11/article/details/38728481 项目介绍: Android上最让人头疼的莫过于从网络获取图片.显示.回收,不论什么一个 ...

  2. mysql insert操作

    insert的语法 INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] ...

  3. WPF绑定各种数据源之object数据源

    一.WPF绑定各种数据源索引 WPF 绑定各种数据源之Datatable WPF绑定各种数据源之object数据源 WPF绑定各种数据源之xml数据源 WPF绑定各种数据源之元素控件属性 Bindin ...

  4. LeetCode(26)题解:Remove Duplicates from Sorted Array

    https://leetcode.com/problems/remove-duplicates-from-sorted-array/ Given a sorted array, remove the ...

  5. mongo 原理 Replica Set Oplog

    [客户的写请求全部发送至主节点] Primary. The primary receives all write operations. Secondaries. Secondaries replic ...

  6. (30)java web的hibernate使用-c3p0连接池配置

    hibernate支持c3p0连接池 需要导入c3p0的jar包 <!-- 配置连接驱动管理类 --> <property name="hibernate.connecti ...

  7. dede摘要长度,dedecms摘要限制,dedecms摘要字数

    dede摘要长度,dedecms摘要限制,dedecms摘要字数 如果可以有效控制文章摘要的字数,那么就可以使得页面布局很灵活. 在Dedecms中,在列表页调用文章摘要的方法主要有: 1:[fiel ...

  8. html5--6-56 阶段练习5-翻转效果

    html5--6-56 阶段练习5-翻转效果 学习要点 运用所学过的知识完成一个简单的小练习,理解对动画的应用. @charset="UTF-8"; *{ ; ; } img{ w ...

  9. 深入浅出Oracle学习笔记:Buffer Cache 和Shared pool

    Buffer cache 和 share pool 是sga中最重要最复杂的部分. 一.Buffer Cache 通常数据的读取.修改都是通过buffer cache 来完成的.buffer cach ...

  10. c#-关于自动属性的思考

    参考:c#-关于自动属性的思考 我的理解:自动属性跟 公有字段 一模一样,编程习惯而已.目前是这么认为的. 自动属性:public string Name{  get;  set } 公有字段:pub ...