p1863

Posted qywyt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了p1863相关的知识,希望对你有一定的参考价值。

技术分享图片

技术分享图片

本题的那个操作可以想到相当于把自己的一个质因数给了别人.

那么既然大家的质因数可以共享,不如我们先给同一个人,然后再均分.均分后的那个数就是调整完的最大公约数.

那么本题的策略就有了,找到所有数的所有质因子与质数和,答案是∏prime[i]^(?sum[prime[i]]/n?);

做第二问的时候可以查看所有数的答案包含的那个质因子的指数是多少,如果少了当然要别人送来,多了不一定需要给别人.23333.总之统计比平均少多少就好.

using namespace std;
int quick(int a,int b)//a^b
{
    int ans=1;
    while(b>0)
    {
        if(b%2==1) ans=ans*a;
        b=b/2;a=a*a;
    }
    return ans;
}
int i,f,t;
int n;
int v[1000010],prime[80000];
int sum,o[110][80000],a[110][80000],ans;
int main()
{
//freopen("123.in","r",stdin);
//freopen("123.out","w",stdout);
    n=1000000;
    for(i=2;i<=n;i++)
    {
        if(v[i]==0)
        {
            sum++;
            v[i]=i;
            prime[sum]=i;
        }
        for(f=1;f<=sum;f++)
        {
            if(prime[f]>v[i]||prime[f]>n/i)break;
            v[i*prime[f]]=prime[f];
        }
    }
    memset(v,0,sizeof(v));
    for(n=read(),i=1;i<=n;i++)
    {
        
        t=read();
        for(f=1;f<=sum&&t>=prime[f];f++)
        {
            if(t%prime[f]==0)
            {
                while(t%prime[f]==0)
                {
                    a[i][f]++;
                    v[f]++;
                    t=t/prime[f];
                }
            }
        }
    }
    ans=1;
    for(i=1;i<=sum;i++)
    {
        v[i]=v[i]/n;
        if(v[i]!=0)
            ans=ans*quick(prime[i],v[i]);
    }
    write(ans);
    ans=0;
    for(i=1;i<=n;i++)
    {
        for(f=1;f<=sum;f++)
            if(v[f]>a[i][f])
                ans+=v[f]-a[i][f];
    }
    cout<<ans;
}

 

以上是关于p1863的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数