|
G-Luckさん
ichinoseさん
お二人ともありがとうございます。
合同式に関する私の説明が拙く、解りづらかった事と思います。
私はVBA初心者なので、逆にお二人のVBA記述がなかなか理解できませんが。(笑)
とりあえず試してみようと思います。
合同式のスクリプトに関する理解は、ichinoseさんのご理解の方が正しいような気がします。そこでお二人にお願いなのですが、VBAで書いたマクロのエクセルシートを直接ファイル添付で送信して頂けないでしょうか?私がこれから書くと非常に時間が、、、、(汗)。
実は、合同式の解を求める連立は2元と3元両方必要で、もう一度簡単にご説明します。
1)合同式が2つの場合。
x≡ 1 mod 7
x≡ 4 mod 11
のとき、一般解はx=77p+15 となります。
mとnの最小公倍数+kという形ですが、pは任意の整数です。
合同式の基本定理
x≡y (mod m)において x=y+pm になるという形式です。
これが、合同式2つになると
x≡ a mod m
x≡ b mod n
のとき、x=LCM(m,n)p+k
となります。
よつて、求めたい整数kは
(n*k+b-a)がmで割って「1」余る[「k」として計算されます。
なので、ichinoseさんに理解して頂いたとおり
「つまり、0〜最小公倍数-1の数値の間で
mで割ってあまりがaかつ、nで割ってあまりがbになる値を求める方法です」
で正解かと思われます。
よって
x≡ 1 mod 7
x≡ 4 mod 11
congruence(7,11,1,4)=15 と LCM(7,11)=77
で一般解は
x=77p+15
2)合同式が3つの場合 例えば
x≡ 2 mod 3
x≡ 3 mod 5
x≡ 2 mod 7
まず
x≡ 2 mod 3
x≡ 3 mod 5
の一般解congruence(3,5,2,3)=8 と LCM(3,5)=15 を求めます。
次に
x≡ 8 mod 15
x≡ 2 mod 7
としたうえで、2つの合同式の場合と同じように
x≡ 8 mod 15
x≡ 2 mod 7
congruence(7,15,2,8)=23 と LCM(15,7)=105を求めて
x=105p+23
となります。
できれば、上記2つのVBAがマクロで作動するエクセルブックを2つ、下記アドレスまでご送信頂けると助かります。
セルの場所はA1からそれぞれ
x≡a(mod m)
x≡b(mod n)
x=K
x≡a(mod M)
x≡b(mod L)
x≡c(mod N)
x=K
という形でかまいません。よろしくおねがい致します。
sattshi_2005@mail.goo.ne.jp
|
|