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的主要内容,如果未能解决你的问题,请参考以下文章