题目描述
给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1X1+...AnXn>0,且S的值最小
输入格式
第一行给出数字N,代表有N个数 下面一行给出N个数
输出格式
S的最小值
输入输出样例
输入 #1
2 4059 -1782
输出 #1
View Code
99
ax+by=c,x∈Z∗,y∈Z∗成立的充要条件是{gcd(a,b)|c}gcd(a,b)∣c 也就是c一定是gcd的倍数 (倍数 >0)

#include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define repp(i,a,b) for(int i=(a);i>=(b);--i) #define ll long long #define see(x) (cerr<<(#x)<<'='<<(x)<<endl) #define inf 0x3f3f3f3f #define CLR(A,v) memset(A,v,sizeof A) ////////////////////////////////// const int N=2e6+10; int n,ans; int main() { cin>>n; rep(i,1,n) { int x;cin>>x; if(x>0)ans=__gcd(ans,x); else ans=__gcd(ans,-x); } cout<<ans; return 0; }