BZOJ_1441_Min_数学+裴蜀定理
Description
给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1*X1+...An*Xn>0,且S的值最小
Input
第一行给出数字N,代表有N个数 下面一行给出N个数
Output
S的最小值
Sample Input
2
4059 -1782
4059 -1782
Sample Output
99
首先有裴蜀定理可知ax+by一定是gcd(a,b)的倍数。
也就是说ax+by能组成的最小正整数就是gcd(a,b)。
对多个数同理。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int gcd(int x,int y) {return y?gcd(y,x%y):x;}
int main() {
// freopen("min.in","r",stdin);
// freopen("min.out","w",stdout);
int ans=0,n;
scanf("%d",&n);
int i,x;
for(i=1;i<=n;i++) scanf("%d",&x),x=x>0?x:-x,ans=gcd(ans,x);
printf("%d\n",ans);
}