Coprime Sequence (HDU 6025)前缀和与后缀和的应用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Coprime Sequence (HDU 6025)前缀和与后缀和的应用相关的知识,希望对你有一定的参考价值。
题意:给出一串数列,这串数列的gcd为1,要求取出一个数使取出后的数列gcd最大。
题解:可以通过对数列进行预处理,求出从下标为1开始的数对于前面的数的gcd(数组从下标0开始),称为前缀gcd,再以类似的方式求出后缀gcd,然后从第一个数开始枚举取出后的gcd(这个数的前缀gcd与后缀gcd的gcd)。找出最大的gcd数即可。
代码如下:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[100010],pre[100010],suf[100010]; int gcd(int a,int b) { return b==0?a:gcd(b,a%b); } int main(){ int t,n; while(~scanf("%d",&t)){ while(t--){ scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } pre[0]=a[0]; for(int i=1;i<n;i++){ pre[i]=gcd(pre[i-1],a[i]); } suf[n-1]=a[n-1]; for(int i=n-2; i>=0; i--){ suf[i]=gcd(suf[i+1],a[i]); } int ans=max(suf[1],pre[n-2]); for(int i=1;i<n-1;i++){ ans=max(ans,gcd(pre[i-1],suf[i+1])); } printf("%d\n",ans); } } return 0; }
以上是关于Coprime Sequence (HDU 6025)前缀和与后缀和的应用的主要内容,如果未能解决你的问题,请参考以下文章
hdu 6025 Coprime Sequence (前后缀GCD)
Coprime Sequence (HDU 6025)前缀和与后缀和的应用