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)前缀和与后缀和的应用

数据结构_coprime_sequence(互质序列)

2017 ccpc女生专场 1003 Coprime Sequence

hdu 5072 Coprime (容斥)

[HDU 5072] Coprime 莫比乌斯反演