P4549裴蜀定理
题目描述
给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1X1+...AnXn>0,且S的值最小
输入输出格式
输入格式:
第一行给出数字N,代表有N个数 下面一行给出N个数
输出格式:
S的最小值
————————————————————————————————————————————————————————
本来以为是证明结果是个这样的题,也太水了,直接运用结论即可
设 则 由整除的性质, 有d|(ax+by)。设s为ax+by最小正值,首先有d|s,令 ,,
可见 也为 的线性组合。由于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
证毕。
转证(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个数
————————————————————————————————————————————————
——————————————————————————————————————
摘自百度百科
#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; }