1 整除
整数aが整数bを割り切るとは、b=acとなる整数cが存在することです。このときa∣bと書き、aをbの約数、bをaの倍数と呼びます。
例 1.1.12=4×3であるから、4∣12である。12=5cを満たす整数cは存在しないので、5∤12である。
命題 1.2.a,b,dを整数とする。d∣aかつd∣bならば、任意の整数u,vに対してd∣(ua+vb)が成り立つ。
証明.a=dx、b=dyを満たす整数x,yを取る。ua+vb=d(ux+vy)であり、ux+vyは整数である。したがってd∣(ua+vb)である。▨
2 除法の原理
整数の除法では、余りを0以上、割る数未満に定めます。
定理 2.1. 整数aと正の整数bに対し、
a=qb+r,0≤r<bを満たす整数の組(q,r)がただ一組存在する。
証明.
S={a−qb∣q∈Z, a−qb≥0}と置く。q=−∣a∣とするとa−qb=a+∣a∣b≥0であるから、Sは空でない。Sの各元に1を加えた集合へ§A3.10 定理 2.1の最小数原理を適用し、Sの最小元r=a−qbを取る。r≥bならば、r−b=a−(q+1)bはSに属し、r−b<rである。これはrの最小性に反する。したがって0≤r<bである。
a=qb+r=q′b+r′、0≤r,r′<bとすると、b(q−q′)=r′−rである。∣r′−r∣<bである一方、q=q′ならば∣b(q−q′)∣≥bとなる。したがってq=q′であり、r=r′である。▨
この定理を除法の原理と呼び、qを商、rを余りと呼びます。
例 2.2.−17=(−4)×5+3であり、0≤3<5なので、−17を5で割った商は−4、余りは3である。−17=(−3)×5−2も等式としては正しいが、−2は余りの条件を満たさない。
3 最大公約数とユークリッドの互除法
定義 3.1 (最大公約数).a,bを、少なくとも一方が0でない整数とする。a,bの正の公約数のうち最大のものを最大公約数 (greatest common divisor) といい、gcd(a,b)と書く。1は公約数であり、正の公約数はa,bのうち零でない整数の絶対値以下であるから、最大公約数は存在する。
補題 3.2.aを整数、bを正の整数とし、q,rをa=qb+r、0≤r<bを満たす整数とする。a,bの公約数とb,rの公約数は一致する。したがって
gcd(a,b)=gcd(b,r)が成り立つ。
証明.dがa,bの公約数ならば、命題 1.2によりd∣(a−qb)=rである。逆に、dがb,rの公約数ならば、同じ命題によりd∣(qb+r)=aである。したがって公約数が一致し、正の公約数の最大値も一致する。▨
定理 3.3.a,bを、少なくとも一方が0でない整数とし、A=max{∣a∣,∣b∣}、B=min{∣a∣,∣b∣}とする。B=0ならば、gcd(a,b)=Aである。B>0ならば、整数の組(A,B)から始め、第2成分が正である間、組(x,y)を(y,r)に置き換える。ただしrはxをyで割った余りである。この手順は有限回で(g,0)に到達し、g=gcd(a,b)となる。
証明. 整数の符号を変えても約数は変わらず、二数の順序を交換しても公約数は変わらないので、gcd(a,b)=gcd(A,B)である。B=0のとき、A,0の正の公約数はAの正の約数であり、その最大値はAである。
B>0とする。定理 2.1により、各段で余りrがただ一通りに定まり、0≤r<yである。第2成分の正の整数は、各段で少なくとも1ずつ減少するため、手順は高々B回で終わる。補題 3.2により各段で最大公約数は変わらない。終了時の組を(g,0)とすると、gは最後の除法で割る数であるからg>0であり、
gcd(a,b)=gcd(A,B)=gcd(g,0)=gである。▨
この手順をユークリッドの互除法と呼びます。
例 3.4.1071と1029に互除法を適用する。
- 1071=1×1029+42
- 1029=24×42+21
- 42=2×21+0
最後の除法で割る数は21であるから、定理 3.3によりgcd(1071,1029)=21である。
1071=3×3×7×17、1029=3×73という素因数分解を使わずに、
3回の除法で最大公約数が得られる。
問題 3.5. 正の整数nに対して、n+1と2n+1の最大公約数を求めよ。
解答.
dをn+1と2n+1の正の公約数とする。命題 1.2により、dは2(n+1)−(2n+1)=1を割り切る。1の正の約数は1だけなので、d=1である。1は二数の公約数であるから、gcd(n+1,2n+1)=1である。▨
閑話休題:現役最古のアルゴリズム ユークリッドの互除法は、ユークリッドの『原論』(紀元前300年頃)第7巻に載っている手続きである。計算機科学者ドナルド・クヌースは著書『The Art of Computer
Programming』で、互除法を「今なお使われている最古の非自明なアルゴリズム」と呼んだ。約2300年前に書かれた手順は、今日も電卓やコンピュータの中で、分数の約分や暗号処理に使われている。
1844年、フランスの数学者ガブリエル・ラメは、互除法の計算回数と入力の大きさの関係を、隣り合うフィボナッチ数を用いて明らかにした。ラメの結果は、具体的なアルゴリズムの実行時間を数学的に解析した最初期の成果とされ、しばしば「アルゴリズム解析という分野の誕生」の一つに数えられる。たとえば、21と13に互除法を適用すると、
2183=1×13+8,=1×5+3,=1×2+1,1352=1×8+5,=1×3+2,=2×1+0となる。この計算では、最後の除法を除いて商が1であり、最後の商は2である。
F1=F2=1、Fn+2=Fn+1+Fn(n≥1)によってフィボナッチ数を定める。正整数A>Bに対して、最後の余り0の除法も含めて互除法がk≥2回の除法を要するならば、A≥Fk+2、B≥Fk+1である。実際、余りをr0=A,r1=B,…,rk>0,rk+1=0とし、各除法をri−1=qiri+ri+1(1≤i≤k)と書く。余りは狭義に減少するので、最後の商はqk≥2、それ以外の商はqi≥1である。したがって、rk≥1=F2、rk−1=qkrk≥2=F3であり、ri≥ri+1+ri+2(0≤i≤k−2)を逆向きに用いる帰納法からri≥Fk−i+2(0≤i≤k)を得る。入力を(A,B)=(Fk+2,Fk+1)とすると、最後の商が2、それ以外の商が1となり、ちょうどk回で停止するので、二つの下界に等号が成立する。上の計算はk=6の場合である。