P4549 【模板】裴蜀定理

P4549 【模板】裴蜀定理

题目描述
给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1X1+...AnXn>0,且S的值最小

输入输出格式
输入格式:
第一行给出数字N,代表有N个数 下面一行给出N个数

输出格式:
S的最小值


飞鼠定理:
对于两个数 \(a, b\)\(ax + by = gcd(a,b)\) 存在解
推广: 对于多于 \(2\) 个的数, 有 \(ax + by + cz + ... = gcd(a, b, c, ...)\)

故此题直接求解全部数的 \(gcd\) 即可

Code

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<climits>
typedef long long LL;
using namespace std;
int RD(){
    int out = 0,flag = 1;char c = getchar();
    while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
    while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
    return flag * out;
    }
int gcd(int a, int b){return b == 0 ? a : gcd(b, a % b);}
int num, ans;
int main(){
	int num = RD();ans = RD();
	if(num == 1){printf("%d\n", abs(ans));return 0;}
	for(int i = 2;i <= num;i++){
		int temp = abs(RD());
		ans = gcd(ans, temp);
		}
	printf("%d\n", ans);
	return 0;
	}
posted @ 2018-08-20 22:22  Tony_Double_Sky  阅读(495)  评论(0编辑  收藏  举报