大伙们觉得可以的话,点个赞支持一下。Ciallo~(∠・ω< )⌒☆
算法解释
1.本题的做法就是凑阶乘,并且因为数字的个数是1e5,所以小于1e5的数能凑出来的最大数就是1e5,并且凑阶层对于大于等于1e5的数是没影响的。
以下是简单的解释
2.4个3!可以凑成一个4!。5个4!可以凑成5!。由此类推,n!的数起码要出现n+1次才能往上面进一位。
3.好了,这里可以解释第一段话了。1e5-1!出现1e5次正好可以凑成1e5!。当数字大于等于1e5的时候,同样的数字起码要出现1e5+1次往上,这已经大于本题所给的范围。
4.有了上面的基础就可以开始说说本题的解法当所有的数都大于等于1e5的时候,这时候的m就是数的最小值,原因就是像上面说的,因为凑阶层已经对数字没影响了,所以这时候就是求这段和的最大公约数,就是最小值
5. 当小于的时候就是统计每一个数出现的个数,只有i出现的个数恰好被i+1除尽的时候,才能继续,因为如果有余数的话,余数就是使得无法恰好被m!除尽,这时候的i就是最大的m
python代码
s=[0 for i in range(10**5+10)]
n=int(input())
f=list(map(int,input().split()))
for i in f:
if i<10**5:
s[i]+=1
for i in range(1,10**5+1):
if s[i]%(i+1)!=0:
print(i)
exit()
s[i+1]+=s[i]//(i+1)
print(min(f))