【BZOJ1441】Min 拓展裴蜀定理

【BZOJ1441】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

Sample Output

99

题解:当n=2时,有裴蜀定理,S的最小值就是gcd(x1,x2);

当n>2时,有拓展裴蜀定理,S的最小值就是gcd(x1,x2...xn)。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n,a,b;
int gcd(int a,int b)
{
	return !b?a:gcd(b,a%b);
}
inline int rd()
{
	int ret=0,f=1;	char gc=getchar();
	while(gc<'0'||gc>'9')	{if(gc=='-')	f=-f;	gc=getchar();}
	while(gc>='0'&&gc<='9')	ret=ret*10+(gc^'0'),gc=getchar();
	return ret*f;
}
int main()
{
	n=rd();
	while(n--)	b=abs(rd()),a=gcd(a,b);
	printf("%d",a);
	return 0;
}
posted @ 2017-11-10 08:26  CQzhangyu  阅读(253)  评论(0编辑  收藏  举报