【洛谷P4549】【模板】裴蜀定理【裴蜀定理】

题目大意:

题目链接:https://www.luogu.org/problem/P4549
给出nn个数(A1...An)(A_1...A_n)现求一组整数序列(X1...Xn)(X_1...X_n)使得S=A1X1+...AnXn>0S=A_1X_1+...A_nX_n>0,且SS的值最小。


思路:

裴蜀定理:对整数a,ba, b和它们得的最大公约数dd,对于任意整数x,yx,y,必然有dax+byd|ax+by
所以我们设ax+by=dk,kZax+by=dk,k\in\Z^*,那么我们就把这个方程减少了一项。
那么利用进行n1n-1次裴蜀定理后,我们就把方程变成了S=axS=ax的形式。那么此时显然x=1x=1时有S=aS=a是最小的。


代码:

#include <cstdio>
#include <algorithm>
using namespace std;

int n,a,b;

int main()
{
	scanf("%d%d",&n,&a);
	for (int i=1;i<n;i++)
	{
		scanf("%d",&b);
		a=__gcd(abs(a),abs(b));
	}
	printf("%d\n",a);
	return 0;
}
posted @ 2019-08-06 17:02  全OI最菜  阅读(169)  评论(0编辑  收藏  举报