洛谷 P4549 【模板】裴蜀定理

题目

题目描述

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

输入格式

第一行给出数字N,代表有N个数 下面一行给出N个数

输出格式

S的最小值

输入输出样例

输入 #1
2
4059 -1782
输出 #1
99

说明/提示

对于100%的数据,1 le n le 201n20,|x_i| le 100000xi100000

 

分析

  • 首先,肯定是用这个定理啦

  • 这个定理是 ax+by=c c|gcd(a,b)
  • 所以两个数的最小整数解肯定是两数的gcd
  • 那么多个数
  • 就是多个数的gcd啦

 

代码

 1 #include<iostream>
 2 using namespace std;
 3 int gcd(int a,int b)
 4 {
 5     if (b==0) return a;
 6     gcd(b,a%b);
 7 }
 8 int main ()
 9 {
10     int n,ans=0;
11     cin>>n;
12     for (int i=1,x;i<=n;i++)
13     {
14         cin>>x;
15         if (x<0)
16           x=-x;
17         ans=gcd(ans,x);
18     } 
19     cout<<ans;
20 }
为何要逼自己长大,去闯不该闯的荒唐
原文地址:https://www.cnblogs.com/zjzjzj/p/11318913.html