BZOJ_1441_Min_数学+裴蜀定理
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); }