P4549裴蜀定理

题目描述

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

输入输出格式

输入格式:

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

输出格式:

S的最小值

————————————————————————————————————————————————————————

本来以为是证明结果是个这样的题,也太水了,直接运用结论即可

 则  由整除的性质,  有d|(ax+by)。设s为ax+by最小正值,首先有d|s,令  ,,

  

可见 也为  的线性组合。由于  线性组合的最小正值  ,可知 。则  ,同理  ,则  ,因此可得  ,命题得证。

——————————————————————————————————————————————————————————————
证法二:
⑴若b=0,则(a,b)=a.这时定理显然成立。
⑵若a,b不等于0.
记d = (a, b), 对ax + by = d,两边同时除以d,可得(a1)x + (b1)y = 1,其中(a1,b1) = 1。
  转证(a1)x + (b1)y = 1。由带余除法:
  ① (a1) = (q1)(b1) + (r1), 其中0 < r1 < b1
  ② (b1) = (q2)(r1) + (r2), 其中0 < r2 < r1
  ③ (r1) = (q3)(r2) + (r3), 其中0 < r3 < r2
  .....
  ④ (rn-4) = (qn-2)(rn-3) + (rn-2)
  ⑤ (rn-3) = (qn-1)(rn-2) + (rn-1)
  ⑥ (rn-2) = (qn)(rn-1) + (rn)
  ⑦ (rn-1) = (qn+1)(rn) + 1
  故,由⑦和⑥推出(rn-2)An-2 + (rn-1)Bn-1 = 1
  再结合⑤推出(rn-3)An-3 + (rn-2)Bn-2 = 1
  再结合④推出(rn-4)An-4 + (rn-3)Bn-3 = 1
  .....
  再结合③推出(r1)A1 + (r2)B2 = 1
  再结合②推出(b1)A0 + (r1)B0 = 1
  再结合①推出(a1)x + (b1)y = 1
  证毕。

 ——————————————————————————————————

扩展到n个数

————————————————————————————————————————————————

设a1,a2,a3......an为n个整数,d是它们的最大公约数,那么存在整数x1......xn使得x1*a1+x2*a2+...xn*an=d。
特别来说,如果a1...an互质(不是两两互质),那么存在整数x1......xn使得x1*a1+x2*a2+...xn*an=1。
——————————————————————————————————————

摘自百度百科

#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b)
{
    return b?gcd(b,a%b):a;
}
int main()
{
    int n,a,b;
    cin>>n;
    cin>>a;
    a=abs(a);
    n--;
    while(n--)
    {
        cin>>b;
        a=gcd(a,b);
        a=abs(a);
    }
    cout<<a;
}
原文地址:https://www.cnblogs.com/SFWR-YOU/p/10887110.html