给 nnn 个整数 A1,…,AnA_1,\dots,A_nA1,…,An ,求另外一个 nnn 整数序列 X1,…,XnX_1,\dots,X_nX1,…,Xn ,使得 S=∑iAi×Xi>0S=\sum_iA_i\times X_i>0S=∑iAi×Xi>0 且 SSS 尽可能地小。
裴蜀定理说的是方程 ax+by=cax+by=cax+by=c 有整数解地充要条件是 gcd(a,b)∣c\mathrm{gcd}(a,b)\mid cgcd(a,b)∣c ,这道题将变量扩展到了 nnn 元,所以求一个 nnn 元 gcd\mathrm{gcd}gcd 就行了。注意要把负数变成正数。
#include<iostream>
#include<cstdio>
using namespace std;
int n,a;
int gcd(int a,int b){
if(!b)return a;
return gcd(b,a%b);
}
int main(){
#ifdef WINE
freopen("data.in","r",stdin);
#endif
scanf("%d",&n);
int res=0;
while(n--){
scanf("%d",&a);
if(a<0)a=-a;
res=gcd(res,a);
}
printf("%d\n",res);
return 0;
}