[NOIP2018校模拟赛]T1 阶乘
题目:###
描述##
有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 阶乘的更多相关文章
- [NOIP2018校模拟赛]T1聚会 party
题目链接: 聚会 分析: 设每个点到1号点的距离为dist_{i},每个点的权值为x_{i},目标点到1号点的距离为dist,权值为x,那么对于每一次查询,我们讨论三种情况: ① 目标家庭在区间左边( ...
- [NOIP2018校模拟赛]T2矩阵分组 Matrix
题目链接: 矩阵分组 分析: 这道题求的是两部分极差当中大的那个的最小值.对于这种求最值的问题,我们很自然(其实并没有)地想到二分答案. 这个题有两个结论: (好像当时看出来了第一个?然后发现下面都不 ...
- 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解
今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...
- NOI.AC: NOIP2018 全国模拟赛习题练习
闲谈: 最后一个星期还是不浪了,做一下模拟赛(还是有点小虚) #30.candy 题目: 有一个人想买糖吃,有两家商店A,B,A商店中第i个糖果的愉悦度为Ai,B商店中第i个糖果的愉悦度为Bi 给出n ...
- 20180610模拟赛T1——脱离地牢
Description 在一个神秘的国度里,年轻的王子Paris与美丽的公主Helen在一起过着幸福的生活.他们都随身带有一块带磁性的阴阳魔法石,身居地狱的魔王Satan早就想着得到这两块石头了,只要 ...
- NOIP欢乐模拟赛 T1 解题报告
小澳的方阵 (matrix.cpp/c/pas) [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑 ...
- [模拟赛] T1 高级打字机
Description 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小 ...
- 【洛谷】NOIP2018原创模拟赛DAY1解题报告
点此进入比赛 T1:小凯的数字 题意:给定q个l,r,求l(l+1)(l+2)...(r-1)r模9的结果 很显然,这是道考验数(运)学(气)的题目 结论:输出\((l+r)*(r-l+1)\over ...
- 2019.2.25 模拟赛T1【集训队作业2018】小Z的礼物
T1: [集训队作业2018]小Z的礼物 我们发现我们要求的是覆盖所有集合里的元素的期望时间. 设\(t_{i,j}\)表示第一次覆盖第i行第j列的格子的时间,我们要求的是\(max\{ALL\}\) ...
随机推荐
- openwrt gstreamer实例学习笔记(六. gstreamer Pads及其功能)
一:概述 如我们在Elements一章中看到的那样,Pads是element对外的接口.数据流从一个element的source pad到另一个element的sink pad.pads的功能(cap ...
- DataFactory 5.6注册码
一.DataFactory 5.6注册码 数据工厂5.6注册码如下,希望能帮助需求之人 AuthKey: 0-87093-23830-05141-17507 SiteMsg: FREELAND EVO ...
- LeetCode(66)题解: Plus One
https://leetcode.com/problems/plus-one/ 题目: Given a non-negative number represented as an array of d ...
- 经常使用 Java API
经常使用Java API 一. java.io.BufferedReader类(用于从文件里读入一段字符.所属套件:java.io) 1. 构造函数BufferedReader(java.io.Fil ...
- asp对中文编码及解码,Decode和Encode中文网址处理
<%'-------------------------------------------------------------------------- '================== ...
- curl: (7) Failed to connect to 127.0.0.1 port 1086: Connection refused
今天我用curl命令,无论如何都是出现: curl: (7) Failed to connect to 127.0.0.1 port 1086: Connection refused 找了很久,不知道 ...
- webservice client setTimeOut
一:eclipse生成的client,基于axis client_sub.getOptions().setTimeOutInMilliSeconds(1000*60); client_sub表示一个客 ...
- Hibernate中的merge使用详情解说
merge的作用是:新new一个对象,如果该对象设置了ID,则这个对象就当作游离态处理: 当ID在数据库中不能找到时,用up ...
- 分享一个好用的函数吧,将js中的对象转成url参数
JavaScript&jQuery获取url参数方法 这个函数呢是自己在写基于Vue+ElementUI管理后台时用到的,,下面列出来两种使用方式: 最普通的,封装一个js函数 /** * 对 ...
- YTU 2866: 结构体---点坐标结构体
2866: 结构体---点坐标结构体 时间限制: 1 Sec 内存限制: 128 MB 提交: 499 解决: 344 题目描述 定义一个表示点坐标的结构体,输入两个点的坐标,输出这两个点中点的坐 ...