前言
比赛时xjq说这道题很水,是个基础数论。
然后…
就连交都没交
正题
给出n个数,求一个最小的mmm使得
m!∏i=1nai=q(q∈N+)\frac{m!}{\prod_{i=1}^na_i}=q(q\in N_+)∏i=1naim!=q(q∈N+)
解题思路
我们考虑因为要求在一起的乘积,所以个体是不会单独被处理的,所以我们可以将a1∼na_{1\sim n}a1∼n的乘积分解质因数,然后如果m!m!m!能够将所有的这些质因子都消掉就可以了。
然后我们考虑单独的一个质因子,比如:
a的乘积有2个5
我们发现5!5!5!只有1个5
但是10!10!10!有2个5,可以消掉,所以这个m至少要求是10。
这样我们就可以得出算法,将a的乘积分解质因数,然后对于每个质因子求一个最小的mmm,然后取这些要求中的最大值就好了。
code
#include<cstdio>
#include<algorithm>
#define N 100010
using namespace std;
int n,a,p[N],m,ans;
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a);for(int j=2;j*j<=a;j++)while(!(a%j))p[j]++,a/=j,ans++;if(a>1) p[a]++,ans++;}//分解乘积for(int i=2;i<=N-10;i++)if(p[i]){int cur=i;while(p[i]){int tmp=cur;while(p[i]&&!(tmp%i)) p[i]--,tmp/=i;cur+=i;}//求最小m的要求m=max(m,cur-i);//取最大要求}printf("%d",m);
}