这个题我做的时候已经看出来,最小的m一定是最小的Ai,然后如果想让想让m+1那么只能让最小的Ai的数量是m+1的倍数因为比如说m=Amin +1 那么想让m!是 Ai阶乘和的倍数只有
nAmin!%m!=0
然后我就不知道如何就m等于Amin+2的情况了,其实可以迭代将nAmin!转化成
n/(Amin+1)Amin+1!然后以相同的方法看是否能将Amin+1!转化为Amin+2!一直迭代
直到不能转化为止,此时最小的Amin就为m的最大值
上代码
import java.util.Scanner;
public class Main {//阶乘的和
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int min=(int)1e9;
int [] arr = new int[n];
int num=n;
while (n-->0){
arr[n]=sc.nextInt();
min = Math.min(arr[n],min);//先求初始化时数组的最小值min
}
int sum=0;
while (true){
for (int i=0;i<num;i++){
if (arr[i]==min){//统计最小Ai的个数
sum++;
}
}
if (sum%(min+1)==0){//如果最小Ai的个数是Ai+1的整数倍,那么可以将Ai的阶乘转为Ai+1
sum=sum/(min+1);//那么最小min也会加Ai+1,同时更细sum的个数
min++;
}else {
break;
}
}
System.out.println(min);
}
}