teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

自己解決につき〆切

2019/02/26 15:30

投稿

vabuff
vabuff

スコア7

title CHANGED
File without changes
body CHANGED
@@ -71,6 +71,8 @@
71
71
 
72
72
  [StackExchange の記事](https://math.stackexchange.com/questions/670405/does-the-extended-euclidean-algorithm-always-return-the-smallest-coefficients-of) を参考にしつつ証明を考えてみました。あまりこういうのは書いたことがないので、間違っていたらご指摘いただきたいです。正しいという確信が得られるまでもうしばらく回答を受け付けたいと思います。
73
73
 
74
+ 2019/02/27 追記: 〆切ました。
75
+
74
76
  ### extgcd が問題の条件を満たす解を与えることの証明
75
77
 
76
78
  ※gcd(0,0)=0 と定義する。

1

自分なりに考えた証明を追記

2019/02/26 15:30

投稿

vabuff
vabuff

スコア7

title CHANGED
File without changes
body CHANGED
@@ -63,4 +63,51 @@
63
63
  }
64
64
  ```
65
65
 
66
- [AOJ submission](https://onlinejudge.u-aizu.ac.jp/status/users/tyanon/submissions/1/NTL_1_E/judge/3398056/C++14)
66
+ [AOJ submission](https://onlinejudge.u-aizu.ac.jp/status/users/tyanon/submissions/1/NTL_1_E/judge/3398056/C++14)
67
+
68
+ ----
69
+
70
+ 2019/02/25 追記:
71
+
72
+ [StackExchange の記事](https://math.stackexchange.com/questions/670405/does-the-extended-euclidean-algorithm-always-return-the-smallest-coefficients-of) を参考にしつつ証明を考えてみました。あまりこういうのは書いたことがないので、間違っていたらご指摘いただきたいです。正しいという確信が得られるまでもうしばらく回答を受け付けたいと思います。
73
+
74
+ ### extgcd が問題の条件を満たす解を与えることの証明
75
+
76
+ ※gcd(0,0)=0 と定義する。
77
+
78
+ a,b を整数とする。g=gcd(a,b) および ax+by=g の整数解 (X,Y) を求める関数 extgcd(a,b)=(g,X,Y) を考える。
79
+ |X|+|Y| が最小の解を最小解と呼ぶ(唯一とは限らない)。
80
+
81
+ * extgcd(a,b)=(g,X,Y) ならば extgcd(-a,b)=(g,-X,Y), extgcd(a,-b)=(g,X,-Y) なので、a>=0, b>=0についてのみ考えれば十分。
82
+ * gcd(a,b)>1 のとき、a=ga', b=gb' とおくと、ax+by=g は a'x+b'y=1 に帰着する。よって、gcd(a,b)<=1 についてのみ考えれば十分。
83
+ * extgcd(a,b)=(g,X,Y) ならば extgcd(b,a)=(g,Y,X) なので、a>=b についてのみ考えれば十分。
84
+ * extgcd(0,0)=(0,0,0), extgcd(1,0)=(1,1,0), extgcd(1,1)=(1,0,1) と定義する。いずれも最小解になっている。
85
+
86
+ 以上より、後は gcd(a,b)=1, a>b>=2 についてのみ考えれば十分。
87
+ extgcd(a,b)=(1,X,Y) とする。a を b で割って a=qb+r と表す (0<r<b)
88
+ extgcd(b,r)=(1,X',Y') ならば、bX'+rY'=1 に r=a-qb を代入して
89
+ X=Y', Y=X'-qY' が得られる。
90
+
91
+ このとき、|X|<=b/2, |Y|<=a/2 が成り立つことを帰納法で示す。
92
+
93
+ g=gcd(a,b)=1 だから、extgcdの再帰呼び出し中のある時点で第2引数が1になる。この直前の extgcd(A,B) を考える。
94
+ A=QB+1, A>B>=2 である。
95
+ extgcd(B,1)=(1,0,1) より、extgcd(A,B)=(1,1,-Q) である。よって
96
+ |1|<=B/2, |-Q|=Q<=QB/2<A/2 より、A,B については命題は成り立っている。
97
+
98
+ 次に一般の a,b について考える。a=qb+r, extgcd(a,b)=(1,X,Y) とする。
99
+ extgcd(b,r)=(1,X',Y'), |X'|<=r/2, |Y'|<=b/2 ならば、
100
+ |X|=|Y'|<=b/2
101
+ |Y|=|X'-qY'|<=|X'|+|qY'|<=r/2+qb/2=(qb+r)/2=a/2
102
+ より、a,b についても命題は成り立つ。
103
+
104
+ よって命題は gcd(a,b)=1, a>b>=2 なる全ての a,b について成り立つ。
105
+
106
+ ところで、ax+by=1 の一般解は (x,y)=(X+mb,Y-ma) と表せる。
107
+ |X|<=b/2 より、m!=0 のとき |X+mb|>=|X|
108
+ |Y|<=a/2 より、m!=0 のとき |Y-ma|>=|Y|
109
+ なので、X,Y は最小解である。最小解が他に存在するためには |X|=b/2, |Y|=a/2 でなければならず、このとき aX+bY は ab, 0, -ab のいずれかになるが、いずれも gcd(a,b)=1 に反する。よって、gcd(a,b)=1, a>b>=2 のとき、ax+by=1 の最小解は唯一である。
110
+
111
+ 他に最小解が複数存在しうるのは (a,b)=(1,1) のみであり、このとき ax+by=1 の最小解は (1,0),(0,1) の2通りある。しかし extgcd(1,1)=(1,0,1) と定義したから、X<=Y は満たされている。
112
+
113
+ 結局、この extgcd の定義では常に最小解が得られ、最小解が複数ある場合は X<=Y なるものが得られる。証明終