跳到主要内容

千葉大学 融合理工学府 数学情報科学専攻 数学・情報数理学コース 2024年8月実施 専門 B10

Author​

祭音Myyura (co-authored with GPT 6 Astra)

Description​

整数 a>b≥0a>b\ge0 に対し、次のアルゴリズムを考える。

while b > 0:
r := a mod b
a := b
b := r
return a

ループを kk 回実行した直後の a の値を rkr_k とし、r0=ar_0=a とする。第 kk 回の除算の商を qkq_k、総実行回数を N(a,b)N(a,b) とする。

(1) r0,…,rNr_0,\ldots,r_N が単調減少することを示せ。(2) qk≥1q_k\ge1 (1≤k<N1\le k<N)、qN≥2q_N\ge2 を示せ。(3) d=gcd⁡(a,b)d=\gcd(a,b) のとき N(a/d,b/d)=N(a,b)N(a/d,b/d)=N(a,b) を示せ。(4) 実行回数が O(log⁡b)O(\log b) であることを示せ。

题目描述​

考虑 Euclid 算法,记每轮结束后的第一变量为 rkr_k、商为 qkq_k、总轮数为 NN。(1) 证明 rkr_k 递减。(2) 证明非末轮商至少一、末轮至少二。(3) 证明两输入同时除以最大公约数不改变轮数。(4) 证明轮数为 O(log⁡b)O(\log b)。

Kai​

b=0b=0 なら実行回数は 00 である。以下 b>0b>0 とし、r1=b,rN+1=0r_1=b,r_{N+1}=0 と補って書く。

(1), (2)​

各除算は

rk−1=qkrk+rk+1,0≤rk+1<rkr_{k-1}=q_kr_k+r_{k+1},\qquad0\le r_{k+1}<r_k

を満たす。初めに r0>r1>0r_0>r_1>0 なので r0>r1>⋯>rN>0r_0>r_1>\cdots>r_N>0。ゆえに qk≥1q_k\ge1。最後は rN−1=qNrNr_{N-1}=q_Nr_N かつ rN−1>rNr_{N-1}>r_N なので qN≥2q_N\ge2。

(3)​

各剰余は dd の倍数である。上の等式をすべて dd で割ると、商 qkq_k は変わらず、正の剰余が 00 になる段階も変わらない。したがって N(a/d,b/d)=N(a,b)N(a/d,b/d)=N(a,b)。

(4)​

rk+1≤rk/2r_{k+1}\le r_k/2 なら次々の剰余も rk/2r_k/2 以下である。rk+1>rk/2r_{k+1}>r_k/2 の場合、rkr_k を rk+1r_{k+1} で割る商は 11 だから

rk+2=rk−rk+1<rk/2.r_{k+2}=r_k-r_{k+1}<r_k/2.

従って二回ごとに剰余は少なくとも半分になる。r1=br_1=b から正の整数の剰余を保てる回数は O(1+log⁡b)O(1+\log b) であり、b≥2b\ge2 では N(a,b)=O(log⁡b)\boxed{N(a,b)=O(\log b)}。b=1b=1 では一回で終了する。