ユークリッドの互除法の拡張とJulia言語のgcdについて
はじめに
あけまして,おめでとうございます。2024年もよろしくお願いします。
私の勤務校で2学期に「整数」の分野を学習しました。その中で,「ユークリッドの互除法を文字式でも利用したい!」ということがあります。
証明は次のような形です。
【証明】
連続する自然数を
なので,ユークリッドの互助法を用いると,
よって,
このように文字を使ったユークリッドの互助法を用いるときに,「1以上の自然数に対して使う」 ことが暗黙の了解になっています。問題集の解答も,この辺りに抵触しないように書いてあることが多いように思います。(後述する「拡張した形」では見たことがありません。)
Julia言語での定義
まずは,Julia言語
で最大公約数の関数gcd
がどのように定義されているか調べます。
gcd
関数
関数gcd
を使うのに特別なパッケージは要りません。
gcd(100,10),gcd(257,32),gcd(78,1100)
(10, 1, 2)
0を含む場合
0含む場合です。
gcd(2,0),gcd(0,2),gcd(0,0)
(2, 2, 0)
0と0の最大公約数は0であることに注意してください。このことに関しては,以下 @FumiharuKato さんの𝕏のポストを参考にしてください。
負の数を含む場合
次に負の数を含む場合です。1以上の自然数が返されます。
gcd(-2,4),gcd(2,-4),gcd(-2,-4)
(2, 2, 2)
マニュアルをみると...
https://docs.julialang.org/en/v1/base/math/#Base.gcdを見ると,次のような例となっています。
有理数についても定義されていますね。
ユークリッドの互除法の再定義
再定義
まず,ユークリッドの互除法を整数全体で利用できるように,次のように再定義します。
https://www.math.titech.ac.jp/~hoya/Teaching/algebra2021sPDF/extEuc.pdfのサイトを参考にしました。
これで,0や負の数も考えることができます。
次の補題も確認しておきます。この補題により,
ユークリッドの互除法の性質
まずは,拡張前でも成り立つ性質です。
3つ目の性質はあまり知られていませんが,式を変形するときに大切です。
0の導入
0が入る場合についてまとめておきます。
負の数の導入
負の数が入る場合についてまとめておきます。
問題
具体的な問題とその答えとなります。
問題1
【解答】
のとき,n=11k+7 \bigstar=11 のとき,n\ne 11k+7 \bigstar=1
function test(x,y)
p = Int[]
for n = x:y
push!(p,gcd(5n-2,3n+1))
end
p
end
for i=0:10
println(test(i*10+1,i*10+10))
end
[1, 1, 1, 1, 1, 1, 11, 1, 1, 1]
[1, 1, 1, 1, 1, 1, 1, 11, 1, 1]
[1, 1, 1, 1, 1, 1, 1, 1, 11, 1]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 11]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[11, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 11, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 1, 11, 1, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 11, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 11, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 11, 1, 1, 1, 1]
問題2
【解答】
のとき,n=118k-49 \bigstar=118 のとき,n=118k+10 \bigstar=59 のとき,n=2m-1 \wedge n\neq 118k-49 \bigstar=2 - 上記以外のとき,
\bigstar=1
function test(x,y)
p = Int[]
for n = x:y
push!(p,gcd(n^5+5,n^3+3))
end
p
end
for i=0:12
println(test(i*10+1,i*10+10))
end
[2, 1, 2, 1, 2, 1, 2, 1, 2, 59]
[2, 1, 2, 1, 2, 1, 2, 1, 2, 1]
[2, 1, 2, 1, 2, 1, 2, 1, 2, 1]
[2, 1, 2, 1, 2, 1, 2, 1, 2, 1]
[2, 1, 2, 1, 2, 1, 2, 1, 2, 1]
[2, 1, 2, 1, 2, 1, 2, 1, 2, 1]
[2, 1, 2, 1, 2, 1, 2, 1, 118, 1]
[2, 1, 2, 1, 2, 1, 2, 1, 2, 1]
[2, 1, 2, 1, 2, 1, 2, 1, 2, 1]
[2, 1, 2, 1, 2, 1, 2, 1, 2, 1]
[2, 1, 2, 1, 2, 1, 2, 1, 2, 1]
[2, 1, 2, 1, 2, 1, 2, 1, 2, 1]
[2, 1, 2, 1, 2, 1, 2, 59, 2, 1]
Discussion