洛谷 P4549 【模板】裴蜀定理

nn 个整数 A1,,AnA_1,\dots,A_n ,求另外一个 nn 整数序列 X1,,XnX_1,\dots,X_n ,使得 S=iAi×Xi>0S=\sum_iA_i\times X_i>0SS 尽可能地小。

裴蜀定理说的是方程 ax+by=cax+by=c 有整数解地充要条件是 gcd(a,b)c\mathrm{gcd}(a,b)\mid c ,这道题将变量扩展到了 nn 元,所以求一个 nngcd\mathrm{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;
}

posted @ 2020-06-27 11:02  winechord  阅读(84)  评论(0编辑  收藏  举报