[NOIP 2009] 细胞分裂(选做)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    int n,m1,m2,cnt=0,s;
    cin>>n;
    cin>>m1>>m2;
    int p[1010];
    int a[1010];
    memset(a,0,sizeof(a));
    for(int i=2; i*i<=m1; i++)
    {
        if(m1%i==0)
        {
            p[cnt]=i;
            while(m1%i==0)
            {
                a[cnt]++;
                m1/=i;
            }
            cnt++;
        }
    }
    if(m1!=1)
    {
        p[cnt]=m1;
        a[cnt]=1;
        cnt++;
    }
    for(int i=0; i<cnt; i++)
    {
        a[i]*=m2;
    }
    bool f;
    int tmp,t;
    int ans=-1;
    for(int i=0; i<n; i++)
    {
        cin>>s;
        f=true;
        for(int j=0; j<cnt; j++)
        {
            if(s%p[j]!=0)
            {
                f=false;
                break;
            }
        }
        if(!f)
            continue;
        t=0;
        for(int j=0; j<cnt; j++)
        {
            tmp=0;
            while(s%p[j]==0)
            {
                s/=p[j];
                tmp++;
            }
            if(a[j]%tmp==0)
                t=max(t,a[j]/tmp);
            else
                t=max(t,a[j]/tmp+1);
        }
        if(ans==-1||ans>t)
            ans=t;
    }
    cout<<ans<<endl;
    return 0;
}
发布了1317 篇原创文章 · 获赞 329 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/chen_zan_yu_/article/details/105233480