前回は,2つの正の数の積は,その正の最小公倍数と,最大公約数の積であること[定理1.5]と,が互いに素でがの倍数ならば,はの倍数であること[定理1.6]を証明しました.
今回は,実際に最小公倍数と最大公約数を求める方法についてです.
實際ニ,與ヘラレタル(正ノ)整數ノ最大公約數,又ハ最小公倍數ヲ求メル方法ハ周知デアルガ,コノ際,念ノ爲ニソノ理論的ノ根據ヲ叩イテオクノモ無用デハアルマイ.
最大公約数を求めるには,ユークリッドの互除法を用いるか,2つ以上の整数を素因数分解して指数部分の最小値を見ていくかすればよいです.
最大公約数の筆算(すだれ算)というのもあります.例えば,の最大公約数は次のように共通の約数でどんどん割っていって,割れなくなったらとするものです.これも,どうやら素因数分解の一意性を根拠にしているようです.
2つの数の最大公約数が分かれば,定理1.5から最小公倍数を求めることができます.
[問題1]
の最大公約数は,の最大公約数に等しい,という有名な定理です.
[解] ヲノ最大公約數トスレバ,ハノ約數,従テノ公約數,従テノ約數デアル.(定理1.4)
定理1.1*1より,はの倍数となります.よってはの公約数です.定理1.4*2より,これはの最大公約数の約数です.
又トスレバ,デアルカラ,同樣ニハの約數デアル.
をの最大公約数とすれば,はの約数なので,の公約数です.よっての約数です.
コノヤウニトトハ各ガ他ノ約數デアルカラ,相等シイ.
「各」は「おのおの」の意味です.これでがめでたく証明できました.
手元の学習参考書には,最後の部分は「かつなので,である」とあります.これもいいですね.
特ニヲデ割ツタ剰餘ヲトスレバ,.
剰余には,最小正剰余*3と,絶対的最小剰余というものがありました.どちらの定義でもが成り立つので,が成立します.
又ヲデ割ツタ剰餘ヲトスレバ,.
となるが存在するので,確かにそうです.
コノヤウニ進ンデ行ケバデアルカラ竟ニハ剰餘ガニナル.
が非負整数で,のとき,非負整数列を次のように定めます.ただし,とします.
- がでないとき,はを満たす唯一の整数
- がのとき,以降は定義しない
このときならばが成り立つので,確かにとなり,数列は狭義単調減少です.また非負整数列でもあるので,添え字が増加するまでには,つまりの範囲にはとなるが存在します.
今ガデ割リ切レルトスレバ,即チ.
でない任意の整数はの約数なので,のとき,が最大公約数になります.
コレガユウクリッドノ互除法デアル.
pythonで書いてみると次のようになります.はを満たす整数で,とします.
def func(a,b):
if b==0:
return a
else:
return func(b,a%b)
mathモジュールをインポートしてから
math.gcd(a,b)
でも十分です*4.
のとき,整除を何回すればよいかについて考えてみます.最悪なケースは余りがなかなか小さくなっていかないとき,つまり商が常に1のときでしょう.例えばのときは,のように回の整除をする必要があります.これはの回よりも多いですね.
で定まる数列を定義して,となるをとおきます.のときよりをで割った商は以上なので,
です.なので,と合わせて帰納的に考えると,以上以下のすべてのについて
が成り立ちます.とするとが得られます.
つまり回目の整除でユークリッドの互除法が終わるとしたらであるということです.数列に現れる整数であって,以下の最大のものをとすれば,が成り立ちます.のとき,
であることが数学的帰納法によって分かるので,です.回以内の整除で,ユークリッドの互除法が終わると言えるでしょう.