【数学推理】蓝桥杯第十四届---阶乘的和

题目描述

给定 n 个数 ,问能满足 m! 为 的因数的最大的 m 是多少。其中 m! 表示 m 的阶乘,即 1 × 2 × 3 × · · · × m。

输入格式

输入的第一行包含一个整数 n 。

第二行包含 n 个整数,分别表示 Ai,相邻整数之间使用一个空格分隔。

输出格式

输出一行包含一个整数表示答案。

样例输入

复制代码
3
2 2 2

样例输出

复制代码
3

提示

对于 40% 的评测用例,n ≤ 5000 ;

对于所有评测用例,1 ≤ n ≤ 10^5 1 ≤ Ai ≤ 10^9 。


(a!+b!+c!)(a<b<c) ,假设 b!是(a!+b!+c!)的最大因数那么一定是个小数(因为一定是一个小数,一定是整数),所以(a!+b!+c!)的最大因数一定是a!,如果有(a+1)个a!,那么 a!+a!+...+a!=(a+1)*a!=(a+1)! ,(如样例中的 2!+2!+2!=3*2!=3! )。


cpp 复制代码
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
#define int long long
const int N=1e5+10;
unordered_map<int,int> mp;
signed main(){
	int n;
	cin>>n;
	int minv=1e9+10;
	for(int i=1;i<=n;i++){
		int x;cin>>x;
		mp[x]++;
		minv=min(minv,x);
	}
	while(mp.count(minv)){
		int t=mp[minv]/(minv+1);
		int k=mp[minv]%(minv+1);
		if(k!=0) break;
		mp[minv+1]+=t;
		minv++;
	}
	cout<<minv<<endl;
	return 0;
}
相关推荐
飒飒真编程37 分钟前
C++类模板继承部分知识及测试代码
开发语言·c++·算法
GeminiGlory41 分钟前
算法练习6-大数乘法(高精度乘法)
算法
熬了夜的程序员1 小时前
【华为机试】HJ61 放苹果
算法·华为·面试·golang
马特说1 小时前
基于随机森林的金融时间序列预测系统:从数据处理到实时预测的完整流水线
算法·随机森林·金融
呆呆的小鳄鱼1 小时前
leetcode:HJ18 识别有效的IP地址和掩码并进行分类统计[华为机考][字符串]
算法·leetcode·华为
艾莉丝努力练剑2 小时前
【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(五)
c语言·开发语言·数据结构·学习·算法
freexyn2 小时前
Matlab自学笔记六十二:求解三角函数方程的通解周期解
笔记·算法·matlab
zstar-_2 小时前
【算法笔记】7.LeetCode-Hot100-图论专项
笔记·算法·leetcode
xienda2 小时前
冒泡、选择、插入排序:三大基础排序算法深度解析(C语言实现)
数据结构·算法·排序算法
用户40315986396632 小时前
带 WriteBuffer 的内存读写操作
java·算法