正题
题目链接:https://www.luogu.org/problem/P4549
题目大意
一个整数序列AAA,一个整数序列XXX使得
∑i=1nAiXi=S\sum_{i=1}^n A_iX_i=Si=1∑nAiXi=S
求SSS可能的最小正整数值。
裴蜀定理
对于方程ax+by=S(x,y∈N+)ax+by=S(x,y\in \mathbb{N}^+)ax+by=S(x,y∈N+)
的充要条件是gcd(a,b)∣Sgcd(a,b)\mid Sgcd(a,b)∣S
证明:::
因为gcd(a,b)∣agcd(a,b)\mid agcd(a,b)∣a且gcd(a,b)∣bgcd(a,b)\mid bgcd(a,b)∣b。又因为有x,y∈N+x,y\in \mathbb{N}^+x,y∈N+
所以有gcd(a,b)∣axgcd(a,b)\mid axgcd(a,b)∣ax且gcd(a,b)∣bygcd(a,b)\mid bygcd(a,b)∣by也就是gcd(a,b)∣(ax+by)gcd(a,b)\mid (ax+by)gcd(a,b)∣(ax+by)
那么设S=gcd(a,b)∗kS=gcd(a,b)*kS=gcd(a,b)∗k那么有S∣(ax+by)∗k⇒S∣(axk+byk)S\mid (ax+by)*k \Rightarrow S\mid (axk+byk)S∣(ax+by)∗k⇒S∣(axk+byk)
解题思路
首先我们考虑这个序列并不是正整数但是我们可以让XiX_iXi取反来达到所有都变成正整数的目的。
所以答案就是gcd(∣A1∣,∣A2∣,∣A3∣,...,∣An∣)gcd(|A_1|,|A_2|,|A_3|,...,|A_n|)gcd(∣A1∣,∣A2∣,∣A3∣,...,∣An∣)
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,ans;
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){int x;scanf("%d",&x);ans=__gcd(ans,abs(x)); }printf("%d",ans);
}